我有一个asp.net mvc4应用程序,我想使用字段验证:
我的模特课程:
namespace sample_mvc4.Models
{
public class User
{
[Required(ErrorMessage="Enter le nom")]
public string Name;
[Required(ErrorMessage = "Enter l'émail")]
public string Email;
[Required(ErrorMessage = "pas de mdp!!!!")]
public string Password;
}
}
控制器
public class HomeController : Controller
{
public ActionResult Index()
{
return View("Register");
}
public ActionResult Register(User u)
{
if (ModelState.IsValid)
{
string s = u.Name;
return View("Index");
}
else
{
return View();
}
}
}
最后查看Register.cshtml
@model sample_mvc4.Models.User
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<link type="text/css" href="~/Content/Site.css" />
<title>Register</title>
</head>
<body>
@using(Html.BeginForm("Register","Home")){
@Html.ValidationSummary()
<p> Name: @Html.TextBoxFor(x => x.Name)</p>
<p> Email : @Html.TextBoxFor(x => x.Email)</p>
<p> Password : @Html.TextBoxFor( x=>x.Password)</p>
<input type="submit" value="Register" />
}
</body>
</html>
我的问题是:
Register
中,User对象的字段始终为空Register
操作中,ModelState.IsValid
始终为真这些结果的原因是什么?我该如何修复我的代码?
答案 0 :(得分:2)
问题是您在模型中使用字段。但Asp.net MVC使用属性进行验证过程。像这样更新您的模型,它将正常工作:
public class User
{
[Required(ErrorMessage = "Enter le nom")]
public string Name { get; set; }
[Required(ErrorMessage = "Enter l'émail")]
public string Email { get; set; }
[Required(ErrorMessage = "pas de mdp!!!!")]
public string Password { get; set; }
}
<强> UPDATE1 强>
您可以像这样更新您的控制器:
public ActionResult Index()
{
return RedirectToAction("Register");
}
public ActionResult Register()
{
return View("Register");
}
public ActionResult Register(User u)
{
if (ModelState.IsValid)
{
string s = u.Name;
return View("Index");
}
else
{
return View();
}
}
或者你可以尝试在RouteCollection中更新路由,因此默认操作将是Register而不是Index
答案 1 :(得分:1)
我相信会在后期操作上检查验证。因为你重定向它不是检查。只是建立新的页面。向控制器添加新方法
[HttpPost]
public ActionResult Index(User model)
{
if(ModelState.IsValid){
return RedirectToAction("Register");
}
else{
return view(model);
}
}
如果存在验证问题,会将其保留在页面上