MVC 4必需属性不起作用

时间:2017-03-02 14:07:31

标签: c# asp.net-mvc

我试着看看像这样的人的其他例子:example。 但它仍然没有用。

我的班级看起来像这样:

    [Required]
    public string UserName { get; set; }
    [Required]
    public string Password { get; set; }

控制器:

    public ActionResult Login(string UserName, string password)
    {
        return View();
    }

我的视图基于类...但是它仍然允许我按下提交按钮,即使没有输入任何内容。

帮助?

3 个答案:

答案 0 :(得分:1)

尝试

public class LoginModel{

[Required(ErrorMessage = "Username cannot be empty")]
public string UserName { get; set; }
[Required(ErrorMessage = "Password cannot be empty")]
public string Password { get; set; }

}

然后在你的行动中使用它

public ActionResult Login(LoginModel loginModel)
{
.... do stuff here ....

    return View();
}

还要确保包含

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>

到您的观点

请在此处阅读:https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-validation-to-the-model

答案 1 :(得分:1)

如果你有这门课程

public class LoginModel
{
    [Required]
    public string UserName { get; set; }
    [Required]
    public string Password { get; set; }
}

控制器

public ActionResult Login()
{
    return View(new LoginModel());
}

呈现视图时,它使用模型(带有应用的验证属性)来呈现不显眼的验证数据属性。之后,jquery.validate.unobtrusive.js使用这些属性进行客户端验证。

[HttpPost]
public ActionResult Login(LoginModel model)
{
    if(this.ModelState.IsValid)
    {
          // do something
    }
    else
    {
       return View(model);
    }
}

在发布时,您必须使用相同的LoginModel作为参数,因为模型绑定器使用它来通过使用您为模型修饰的验证属性再次填充ModelState。

答案 2 :(得分:0)

我同意Alex Art的回答,并在答案中加入你可以在控制器中进行检查:

[HttpPost]
public ActionResult Login(LoginModel model)
{
    if(string.IsNullOrWhiteSpace(model.UserName)
    {
          ModelState.AddModelError("UserName","This field is required!");
          return View(model);
    }

    /* Same can be done for password*/

    /* I am sure once the user has logged in successfully.. you won't want to return the same view, but rather redirect to another action */

    return RedirectToAction("AnotherAction","ControllerName");

}

我希望这会有所帮助。