Validation .Net MVC ModelState.IsValid始终返回true

Validation .Net MVC ModelState.IsValid始终返回true,validation,model-view-controller,modelstate,Validation,Model View Controller,Modelstate,ModelState.IsValid始终返回true 代码: user.cs public class User { public int UserID { get; set; } public string Username { get; set; } public string FirstName { get; set; } [Required] public string LastName { get; set; } } HomeContro

ModelState.IsValid始终返回true

代码:

user.cs

public class User
{

    public int UserID { get; set; }

    public string Username { get; set; }
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }
}
HomeController.cs

public ActionResult SaveUser(User user)
    {
        if (ModelState.IsValid)
        {
            //create DBContext object
            using (var dbCtx = new UsersDbEntities())
            {
                dbCtx.Entry(user).State = EntityState.Modified;

                dbCtx.SaveChanges();
            }
            return View("ShowUser", user);
        }
        return View("EditUser", user);

    }
Register.cshtml

     @model TrainingWebsite.Models.User

<div id="myForm">
    @using (Html.BeginForm("RegisterUser", "Home", FormMethod.Post))
    {
    if (@ViewBag.Message != null)
    {
        <div style="border: 1px solid red">
            @ViewBag.Message
        </div>
    }
    <table>
        <tr>
            <td>@Html.LabelFor(a => a.Username)</td>
            <td>@Html.TextBoxFor(a => a.Username, new { id = "id_username" })</td>
            <td>@Html.ValidationMessageFor(a => a.Username)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(a => a.FirstName)</td>
            <td>@Html.TextBoxFor(a => a.FirstName, new { id = "id_firstName" })</td>
            <td>@Html.ValidationMessageFor(a => a.FirstName)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(a => a.LastName)</td>
            <td>@Html.TextBoxFor(a => a.LastName, new { id = "id_lastName" })</td>
            <td>@Html.ValidationMessageFor(a => a.LastName)</td>
        </tr>
 </table>
@model TrainingWebsite.Models.User
@使用(Html.BeginForm(“RegisterUser”、“Home”、FormMethod.Post))
{
如果(@ViewBag.Message!=null)
{
@查看包。留言
}
@LabelFor(a=>a.Username)
@TextBoxFor(a=>a.Username,新的{id=“id\u Username”})
@Html.ValidationMessageFor(a=>a.Username)
@LabelFor(a=>a.FirstName)
@TextBoxFor(a=>a.FirstName,新的{id=“id_FirstName”})
@Html.ValidationMessageFor(a=>a.FirstName)
@LabelFor(a=>a.LastName)
@TextBoxFor(a=>a.LastName,新的{id=“id\u LastName”})
@Html.ValidationMessageFor(a=>a.LastName)

ModelState.IsValid为true,即使姓氏字段为空,但却是必填字段

任何帮助都将不胜感激。提前谢谢


David

一件需要快速检查的事情是,在您发布的两种操作方法中,同一名称空间中的
用户
模型:
保存用户
注册用户
?我认为屏幕截图中的
用户
应该来自实体框架模型,该模型可能没有
[必需]
attribute?用户模型位于名称空间“TrainingWebsite.Models”中,控制器方法位于名称空间“TrainingWebsite.Controllers”中,我已将using directive“using TrainingWebsite.Models;”添加到控制器类中,但它作为未使用的指令变灰。这是否与我的问题有关?您显然有两个模型名称
User
RegisterUser()
方法中的名称与视图中的名称不同(并且将具有
ConfirmPassword
等属性的对象保存到数据库是没有意义的。请将视图中模型的名称更改为(例如)
UserViewModel
RegisterViewModel
因此,清除视图模型并避免冲突(它还应位于单独的文件夹中,而不是您的模型文件夹中)您必须阻止空字符串。一件快速检查的事情是,在您发布的两种操作方法中,同一命名空间中的
User
模型:
SaveUser
RegisterUser
?我认为屏幕截图中的
User
应该来自实体框架模型,该模型可能没有
[必需]
attribute?用户模型位于名称空间“TrainingWebsite.Models”中,控制器方法位于名称空间“TrainingWebsite.Controllers”中,我已将using directive“using TrainingWebsite.Models;”添加到控制器类中,但它作为未使用的指令变灰。这是否与我的问题有关?您显然有两个模型名称
User
RegisterUser()
方法中的名称与视图中的名称不同(并且将具有
ConfirmPassword
等属性的对象保存到数据库是没有意义的。请将视图中模型的名称更改为(例如)
UserViewModel
RegisterViewModel
因此,清除它是一个视图模型并避免冲突(它也应该在单独的文件夹中,而不是模型文件夹中),您必须阻止空字符串。