2017-08-25 92 views
0

我有一个简单的MVC代码,其中包含validation.but对名称属性的验证(必需)不起作用。在“InsertStudent”操作结果后,我在控制器中创建BreakPoint。为什么mvc验证在我的代码中不起作用?

所以我运行并填写表单,而不填写名称文本框,我期望在我的控制器中的“IsValid”是false.but它是真的!

我的看法是:

@model HelloWorld.Models.student 

    @{ 
     Layout = null; 
    } 

    <!DOCTYPE html> 

    <html> 
    <head> 
     <meta name="viewport" content="width=device-width" /> 
     <title>AddStudent2</title> 
    </head> 
    <body> 
     <script src="~/Scripts/jquery-1.8.2.min.js"></script> 
     <script src="~/Scripts/jquery.validate.min.js"></script> 
     <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

     @using (Html.BeginForm("InsertStudent","home",FormMethod.Post)) { 
      @Html.AntiForgeryToken() 
      @Html.ValidationSummary(true) 

      <fieldset> 
       <legend>student</legend> 

       <div class="editor-label"> 
        @Html.LabelFor(model => model.Name) 
        @Html.ValidationMessageFor(model => model.Name) 
       </div> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.Name) 
        @Html.ValidationMessageFor(model => model.Name) 
       </div> 

       <div class="editor-label"> 
        @Html.LabelFor(model => model.Family) 
       </div> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.Family) 
        @Html.ValidationMessageFor(model => model.Family) 
       </div> 

       <div class="editor-label"> 
        @Html.LabelFor(model => model.Age) 
       </div> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.Age) 
        @Html.ValidationMessageFor(model => model.Age) 
       </div> 

       <div class="editor-label"> 
        @Html.LabelFor(model => model.Email) 
       </div> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.Email) 
        @Html.ValidationMessageFor(model => model.Email) 
       </div> 

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

     <div> 
      @Html.ActionLink("Back to List", "Index") 
     </div> 
    </body> 
    </html> 

,这是我的控制器:

public class HomeController : Controller 
    { 
     // 
     // GET: /Home/ 

     public ActionResult index() 
     { 
      return View("home"); 
     } 
     public ActionResult addstudent() 
     { 
      student stud = new student(); 
      return View(stud); 
     } 

     public ActionResult InsertStudent(student stud) 
     { 
      if (ModelState.IsValid==true) 
      { 
       //sahih 
      } 
      else{ 
       //ghalat 
      } 


      return View("addstudent"); 
     } 

     public ActionResult AddStudent2() 
     { 

      student stud2 = new student(); 
      return View(stud2); 
     } 

    } 
} 

和型号:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 

namespace HelloWorld.Models 
{ 
    public class student 
    { 
     public int Id { get; set; } 

     public string Name { get; set; } 
     [Required] 
     public string Family { get; set; } 
     [Required] 
     //[MaxLength(5)] 
     public int Age { get; set; } 


     public string Email { get; set; } 

    } 
} 

请帮我

+1

您的“名称”属性不是必需的。你的“家庭”财产是。这是一个错字? –

+0

是的,这是正确的 – bami

+0

您应该更新您的示例和您的代码,以在Name属性中添加必需的属性。让我们知道验证是否仍然失败。 – Wndrr

回答

1

你不必一个您的名称属性上的属性。添加它,它的验证应该失败

public class student 
{ 
    public int Id { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public string Family { get; set; } 
    [Required] 
    public int Age { get; set; } 
    public string Email { get; set; } 
} 
+0

你不需要'AllowEmptyStrings = false'(默认是'false') –

+0

请不要浪费领带回答将被关闭的题外问题 –

+0

wndrr是它失败了。你的意思是我不能要求名称属性的属性无论如何?!! – bami

1

我能解决这个问题。

我不得不把[required]属性放在我的name属性下面,而不是放在上面。

public class student 
    { 
     public int Id { get; set; } 
     [Required(AllowEmptyStrings = false)] 
     public string Name { get; set; } 
     [Required(AllowEmptyStrings=false)] 
     public string Family { get; set; } 
     [Required(AllowEmptyStrings = false)] 
     //[MaxLength(5)] 
     public int Age { get; set; } 


     public string Email { get; set; } 

    } 
+0

请记住,元数据(有关属性/方法或字面上任何事情的信息)将始终在事物之前它描述:-) – Wndrr

+0

注意:正如@Stephen Muecke所指出的那样,'AllowEmptyStrings = false'是多余的,因为'false'是默认值。 – Wndrr

相关问题