2013-04-29 21 views
6

Wymagane sprawdzanie poprawności pola bez uruchamiania.MVC Wymagane sprawdzanie poprawności pola nie działa

Model:

public class Client 
    { 
     [Required(ErrorMessage="Name Required")] 
     [DisplayFormat(ConvertEmptyStringToNull = false)] 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string Mobile { get; set; } 
     public string Telephone { get; set; } 
     public string Fax { get; set; } 
     public string Company { get; set; } 
    } 

Kontroler:

[HttpPost] 
     public ActionResult Create(Client client) 
     { 
      try 
      { 
       // TODO: Add insert logic here 
       ClientRepository rep = new ClientRepository(); 
       rep.AddClient(client); 
       rep.Save(); 
       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(); 
      } 
     } 

Widok:

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Create 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Add New Client</h2> 

    <% using (Html.BeginForm()) {%> 
     <%: Html.ValidationSummary(true) %> 

     <fieldset> 
      <legend>Fields</legend> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Name) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Name) %> 
       <%: Html.ValidationMessageFor(model => model.Name) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Address) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Address) %> 
       <%: Html.ValidationMessageFor(model => model.Address) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Mobile) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Mobile) %> 
       <%: Html.ValidationMessageFor(model => model.Mobile) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Telephone) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Telephone) %> 
       <%: Html.ValidationMessageFor(model => model.Telephone) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Fax) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Fax) %> 
       <%: Html.ValidationMessageFor(model => model.Fax) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.Company) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.Company) %> 
       <%: Html.ValidationMessageFor(model => model.Company) %> 
      </div> 

      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 

    <% } %> 

    <div> 
     <%: Html.ActionLink("Back to List", "Index") %> 
    </div> 

</asp:Content> 
+0

** [Dlaczego walidacji po stronie serwera, a nie po stronie klienta] (http://stackoverflow.com/a/16245682/2007801) ** –

+1

@ user2007801 tylko dla rekordów, należy nigdy ufać użytkownik wkład. Sprawdzanie poprawności po stronie klienta może być wyłączone - manipulowane - fałszywe, itp., Więc walidacja po stronie serwera jest zawsze konieczna. – Oscar

Odpowiedz

14

Zastosowanie ModelState.IsValid p roperty

public ActionResult Create(Client client) 
{ 

    if(ModelState.IsValid) 
    { 
    // TODO: Add code here 
     ClientRepository rep = new ClientRepository(); 
     rep.AddClient(client); 
     rep.Save(); 
     return RedirectToAction("Index"); 
    } 
    return View(client); 
} 
+0

Myślę, że to nie jest odpowiedź. Jest to inny sposób sprawdzania poprawności pól. – hasanaydogar

+1

Nie sądzę. – adatapost

Powiązane problemy