2010-12-19 106 views
0

我試圖得到什麼,我認爲是使用一個模型DataAnnotations來驅動客戶端驗證,以及一個簡單的例子。DataAnnotations駕駛客戶端驗證問題

這裏是我的模型......

public class Person 
{ 
    [Required(ErrorMessage = "First Name Required")] 
    public string FirstName { get; set; } 
    [Required(ErrorMessage = "Last Name Required")] 
    public string LastName { get; set; } 
} 

這裏是我的控制器......

public class FriendsController : Controller 
{ 
    public ActionResult Create() 
    { 
    Person newFriend = new Person(); 
    return View(newFriend); 
    } 

    [HttpPost] 
    public ActionResult Create(Person friendToCreate) 
    { 
    if (ModelState.IsValid) 
    { 
    // todo -- do something here 
    return Redirect("/"); 
    } 

    // Invalid - redisplay form with errors 
    return View(friendToCreate); 
    } 
} 

,這裏是我的觀點...

@model MvcApplication4.Models.Person 
<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    <script src="@Url.Content("~/Scripts/jquery-1.4.4.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script> 
</head> 
<body> 
    <h2> 
     Create</h2> 
    @{Html.EnableClientValidation();} 
    @using (Html.BeginForm()) 
    { 
     <fieldset> 
      <p> 
       @Html.LabelFor(m => m.FirstName) 
       @Html.TextBoxFor(m => m.FirstName) 
       @Html.ValidationMessageFor(m => m.FirstName) 
      </p> 
      <p> 
       @Html.LabelFor(m => m.LastName) 
       @Html.TextBoxFor(m => m.LastName) 
       @Html.ValidationMessageFor(m => m.LastName) 
      </p> 
      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 
    } 
</body> 
</html> 

服務器端驗證工作正常,驗證錯誤消息按預期顯示。但是,我沒有得到客戶端驗證的工作。有什麼顯而易見的,我失蹤,使客戶端驗證出現?

回答

1

您是否在您的web.config文件上啓用了客戶端驗證?

您可以直接做在web.config文件添加幾個標誌的appSetting部分

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

,或者您可以使用純C#代碼

HtmlHelper.ClientValidationEnabled = true; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 

做到這一點,我建議你的內心閱讀Brad Wilson的文章Unobtrusive Client Validation in ASP.NET MVC 3

+0

感謝您的快速回答。我剛剛閱讀了布拉德的文章,感謝您的鏈接。他描述了我遇到的確切問題。 原來,如果我從上面刪除了MS腳本,而是包含了jquery.validate.js和jquery.validate.unobtrusive.js,那麼客戶端驗證工作得很好!對於MVC3來說,MS特定的東西似乎讓位於JSON實現。很高興看到MS正在朝這個方向發展,而不是嘗試自己吃掉整個蘋果。 – 2010-12-20 00:16:26

+0

不客氣。很高興幫助! – Lorenzo 2010-12-20 00:17:37