Asp.net mvc mvc中的数据验证不起作用

Asp.net mvc mvc中的数据验证不起作用,asp.net-mvc,validation,Asp.net Mvc,Validation,我现在在一个mvc项目中,在验证用户输入方面遇到了问题。以下是我用于执行验证的步骤: 我的实体如下所示: public class Sysuser { public Guid User_id { get; set; } //pk public Guid? Permission_id { get; set; } public Guid? Sex_id { get; set; } [Required(ErrorMessage="Pls input the user name")] [String

我现在在一个mvc项目中,在验证用户输入方面遇到了问题。以下是我用于执行验证的步骤:

我的实体如下所示:

public class Sysuser
{
public Guid User_id { get; set; }  //pk
public Guid? Permission_id { get; set; }
public Guid? Sex_id { get; set; }

[Required(ErrorMessage="Pls input the user name")]
[StringLength(50,ErrorMessage="UserName must less than 50 chars")]
public string User_name { get; set; }

[Required(ErrorMessage = "Pls input the pwd")]
public string Password { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Userdesc { get; set; }
public bool Isfamer { get; set; }

public string Ctrlpwd { get; set; }  
public Guid Parent_id { get; set; } 

public Syspermission Permission { get; set; }
public Bassex Sex { get; set; }
}
<td style="width:100px;  text-align:right;">用户姓名:</td>
<td><%=Html.TextBox("User_name", (b == null) ? string.Empty : b.User_name, new { @class = "textbox" })%>
<%=Html.ValidationMessage("User_name")%>
</td>
  public global::System.String user_name
    {
        get
        {
            return _user_name;
        }
        set
        {
            Onuser_nameChanging(value);
            ReportPropertyChanging("user_name");
            _user_name = StructuralObject.SetValidValue(value, false);
            ReportPropertyChanged("user_name");
            Onuser_nameChanged();
        }
    }
    Exception Thrown at : _user_name = StructuralObject.SetValidValue(value, false); This property can't be set to null.
在SysUser.aspx页面中,我包含了所需的js文件:

<script src="../../Scripts/validation/jquery-1.7.2.min.js" type="text/javascript">  </script>
<script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

为什么我会犯这个错误?有人能帮我解决吗?thx.

您需要创建SysUser.aspx的stronly类型视图,然后使用,而不是:

<%=Html.TextBox(...)

谢谢你的回答,但我有成千上万的文本框,恐怕这是唯一的办法。强类型视图使客户端和服务器端的验证更加容易。Visual Studio可以生成一个包含所有元素的表单,供您在创建新视图时选择编辑模板。这让我很难过。您是否有其他方法来执行客户端验证?是的,您需要手动实现所有客户端验证规则,请参阅:但是,当您在模型中进行更改时,不要忘记也将这些更改应用于验证规则。
<%=Html.TextBox(...)
<%=Html.TextBoxFor(m => m.User_Name, ...)
[HttpPost]
public ActionResult MySaveFunction(MyModel model)
{
  if (ModelState.IsValid)
  {
    // save entity in db and redirect to for example success page
  }
  return View(model); // show the form page again
}