在編寫ASP.NET MVC應用程序時,只依賴內置的視圖輔助方法很難達到很高的生產力,即使是定義在MvcFutures中的補充類庫,也很難滿足項目的具體需求。此外,不同的項目有不同的特點,在很多時候也需要定義較為特殊的輔助方法,使開發人員能夠更快,更方便地寫出更容易維護的代碼。這也是自定義視圖輔助方法最主要的目的(沒有之一)。而這次的文章,便是給出一個這方面的示例,可作為此類問題的一個參考。
預備
在編寫客戶端HTML時,進行客戶端驗證是最常見的工作之一。既然ASP.NET MVC集成了jQuery類庫,那麼我們不妨基於jQuery的Validate插件編寫這部分功能。假設有如下表單:
<form method="post" action="" id="form">
<p>
<span>Name: </span> <!-- 必填 -->
<input type="text" name="user.Name" />
</p>
<p>
<span>Age: </span> <!-- 必填,15到28之間的數字 -->
<input type="text" name="user.Age" />
</p>
<p>
<span>Email:</span> <!-- 必填,且為合法Email -->
<input type="text" name="user.Email" />
</p>
<input type="submit" value="Submit" />
</form>
如果使用JQuery Validate插件進行客戶端校驗,那麼我們可以編寫如下代碼:
<script language="javascript" type="text/javascript">
$("#form").validate({
"rules": {
"user.Name": { "required": true },
"user.Age": {
"required": true,
"number": true,
"range": [15, 28]
},
"user.Email": {
"required": true,
"email": true
}
},
"messages": {
"user.Name": { "required": "please provide your name!!!" },
"user.Email": {
"required": "email please...",
"email": "valid email please..."
}
}, "onkeyup": false
});
</script>
以上這段腳本的作用便是告訴jQuery校驗哪個表單,對表單中的各個元素分別采取哪種校驗方式,以及在發生錯誤的時候該提示什麼信息(詳細內容可查閱文檔)。這裡可能需要補充一段題外話。實際上jQuery.Validate非常靈活,可以有各種方式提供校驗信息,例如直接為html元素加特殊標記。不過老趙認為那些方法的trick意味太濃,且不容易編寫輔助方法協助開發,因此刻意忽略那些方式。
這樣的結果可能會招一些前台開發人員歡喜,不過老趙覺得,至少有三個地方需要提高:
數據分散,提高維護難度。例如HTML元素和校驗規則分離,校驗規則
對於開發人員來說,編寫JSON較不方便,容易發生錯誤。
缺少對於“自動校驗”的支持,需要完全手寫。
而我們編寫的輔助方法,主要就是面向前兩點,而最後一點可以說是自然而然的事情。