在Asp.net mvc4应用程序中使用验证消息

时间:2013-12-22 23:24:49

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我有一个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>

我的问题是:

  1. 当我让一个字段或更多字段为空时,错误消息不会出现,为什么?
  2. 在操作Register中,User对象的字段始终为空
  3. 当我提交表单时,在Register操作中,ModelState.IsValid始终为真
  4. 这些结果的原因是什么?我该如何修复我的代码?

2 个答案:

答案 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);
    }
}
如果存在验证问题,

会将其保留在页面上