2010-12-19 1 views
0

Ich versuche zu bekommen, was ich denke, ist ein einfaches Beispiel der Verwendung von DataAnnotations auf einem Modell, um die Client-Seite Validierung auch zu fahren.DataAnnotations treibende clientseitige Validierungsproblem

Hier ist mein Modell ...

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

Hier mein Controller ist ...

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); 
    } 
} 

und hier meiner Meinung nach ...

ist
@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> 

Die Server-Seite Die Validierung funktioniert einwandfrei und die Validierungsfehlermeldungen werden wie erwartet angezeigt. Ich bekomme jedoch nicht die Client-Seite Validierung zu arbeiten. Gibt es etwas Offensichtliches, dass ich vermisse, um die clientseitige Validierung erscheinen zu lassen?

Antwort

1

Haben Sie in Ihrer web.config-Datei die clientseitige Validierung aktiviert?

Sie können es direkt auf der Datei web.config ein paar Fahnen innerhalb des Ausschnitts appSetting Zugabe

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

oder Sie es mit reinem C# -Code tun

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

Ich empfehle Ihnen, Lesen Sie Brad Wilsons Artikel Unobtrusive Client Validation in ASP.NET MVC 3

+0

Danke für die schnelle Antwort. Und ich habe gerade Brads Artikel gelesen, danke für den Link. Er beschrieb das genaue Problem, das ich hatte. Stellt sich heraus, wenn ich die MS-Skripts von oben entfernen und stattdessen jquery.validate.js und jquery.validate.unobtrusive.js enthalten, dann funktioniert die clientseitige Validierung einwandfrei! Es scheint für MVC3, dass die MS-spezifischen Sachen der JSON-Implementierung weichen. Freut mich zu sehen, dass MS in diese Richtung geht, anstatt zu versuchen, den ganzen Apfel alleine zu essen. –

+0

Gern geschehen. Froh, dass es geholfen hat! – Lorenzo