Asp.net-Mvc

MVC 必填欄位驗證不起作用

  • September 9, 2020

必填欄位驗證未觸發。

模型:

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

控制器:

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

看法:

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

使用ModelState.IsValid屬性

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

[BindRequired(ErrorMessage = "Name Required")]對於必需的欄位驗證,用而不是使用來 裝飾您的函式 [Required(ErrorMessage="Name Required")]

引用自:https://stackoverflow.com/questions/16270377