demoshop

demo, trying to be the best_

ASP.NET MVC表單驗證

  • 2009-02-03
  • 19591
  • 0
官方網站
http://www.asp.net/mvc/

今天算是開始第一個ASP.NET MVC專案的製作,第一個遇到的問題就是表單的驗證,原本以為內建的驗證可以直接應付,沒想到那玩意實在太陽春了。

當你使用的是ASP.NET MVC RC1的版本時可以用內建的模板建立出基本的Create View而欄位都會有基本的驗證如下

<%= Html.TextBox("username") %>
<%= Html.ValidationMessage("username") %> 

demo原本天真的認為他至少會幫我驗證null 沒想到事與願違,只有寫這樣的時候預設就是驗證資料型別,比如你資料庫開INT你就不能寫"A"進去其餘的一切允許阿!!當然這樣是不可能用的參考了內建範本的AccountController.cs我們可以找到基本的驗證寫法。

  if (String.IsNullOrEmpty(username))
             {
                 ModelState.AddModelError("username", "You must specify a username.");
             } 

是的ModelState擁有一個AddModelError的方法,可以對應到View的欄位利用這種方式我們可以很簡單的寫出驗證的code,不過如果你是使用LINQ to SQL還有另一招可以用,自行實做 partial method來驗證

partial void OnValidate(System.Data.Linq.ChangeAction action)
       {
           if (action == System.Data.Linq.ChangeAction.Insert)
           {
               if (this._username == null)
               {
                   throw new Exception("請輸入姓名");
               }
           }
       } 

然後就在controller加上try catch就可以了

try
{
...
}
catch (Exception ex)
{
    ModelState.AddModelError("username", ex.Message);
} 

http://blog.miniasp.com/post/2008/06/Use-OnValidate-partial-method-on-LINQ-to-SQL-to-do-business-logic-validation.aspx

回應討論