1

在ASP.NET MVC 3 Web應用程序中我有一個viewmodel,其屬性用DataType屬性標記,但它們不會在cliant端進行實際驗證,並且在服務器端,爲什麼?DataType屬性不起作用

public class RegisterModel 
{ 
    [Required(ErrorMessage = "Phone number is required")] 
    [DataType(DataType.PhoneNumber)] 
    [Display(Name = "Phone number")] 
    public string PhoneNumber { get; set; } 

    [Required(ErrorMessage = "E-mail address is required")] 
    [DataType(DataType.EmailAddress, ErrorMessage = "Please enter a valid date (ex: 2/14/2011)")] 
    [Display(Name = "E-mail address")] 
    public string Email { get; set; } 
} 

感謝您的回覆。

回答

3

數據類型屬性不能被用來驗證用戶輸入。它們僅提供使用模板幫助器呈現值的提示。

如果沒有內建的驗證屬性來滿足您的需求,例如Range或Required,那麼您應該做的是創建自定義屬性驗證屬性並使用該屬性修飾您的模型屬性以進行驗證。例如,對於DataType.EmailAddress

這是在臨Asp.net MVC 3框架描述(亞當·弗里曼和史蒂夫·桑德森,618頁或左右)

0

是否包含:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
在母版頁

另外,你需要這些在Web.config

<appSettings> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings> 
+0

結果相同 –

+0

也添加了web.config位。往上看。 –

+0

它已經被添加,仍然是相同的結果 –

0

我的事實,數據類型屬性不進行任何驗證同意。但你有必要的屬性,應該工作。

您必須有一個表單來呈現您的屬性的控件。當表單發佈在提交點擊。

假設您的表單發佈到下面的方法。

[HttpPost] 
     public ActionResult SaveRegisterDetails(Register registerDetails) 
     { 
      if (ModelState.IsValid) 
       return View(); 
      else 
       return View("Index", registerDetails); 
     } 

傳遞您的視圖模型對象作爲參數。從表單發佈的所有值都將出現在此對象中。然後檢查ModelState是否有效。如果無效,則返回來自表單發佈位置的相同視圖並傳遞ViewModel對象作爲參數。

如果您使用的是EditorForModel或DisplyForModel,那麼請使用ValidationSummary助手在UI上顯示錯誤消息。