MVC模型验证

时间:2016-10-27 08:42:30

标签: asp.net-mvc error-handling model

因此,我正在构建一个需要用户模型验证的应用程序,如果向用户填写了不正确的属性,它将告诉他们。 我已经设置了数据注释,但我不确定如何将错误消息转发回用户? 到目前为止,我已经根据我的模型和视图进行了设置。

模型

public class DatabaseModel
    {
        [Required(ErrorMessage = ("A first name is required"))]
        public string FirstName { get; set; }
        [Required(ErrorMessage = ("A last name is required"))]
        public string LastName { get; set; }
        [Required(ErrorMessage = ("A valid role is required"))]
        public string Role { get; set; }
        // TODO - Validate rank to only b 1 - 10
        //
        [Range(1,10, ErrorMessage = ("A rank between 1 and 10 is required"))]
        public int Rank { get; set; }      

    }

查看

@model RoleCreatorAndEditor.Models.DatabaseModel
@{
    ViewData["Title"] = "Index";
}

<h2>User Information</h2>

<p>This is your user information!</p>

@using (Html.BeginForm("Index", "Home", FormMethod.Post)) {
    @Html.Label("First Name")
    <br>
    @Html.TextBoxFor(m => m.FirstName)
    <br>
    @Html.Label("Last Name")
    <br>
    @Html.TextBoxFor(m=>m.LastName)
    <br>
    @Html.Label("Role")
    <br>
    @Html.TextBoxFor(m => m.Role)
    <br>
    @Html.Label("Rank")
    <br>
    @Html.TextBoxFor(m => m.Rank)
    <br><br>
    <input type="submit" value="Save">
}

我的控制器

public class HomeController : Controller
    {
        // GET: Home
        [HttpGet]
        public ActionResult Index()
        {
            DatabaseModel model = new DatabaseModel();
            return View(model);
        }
        [HttpPost]
        public ActionResult Index(DatabaseModel model)
        {
            if (ModelState.IsValid)
            {
                ListToDatatable convert = new ListToDatatable();
                DataTable user = convert.Convert(model);
                DatabaseRepository dbRepo = new DatabaseRepository();
                dbRepo.Upload(user);
            }
            return View();
        }
    }

我相信模型需要传递回视图才能显示错误信息,虽然我已经阅读了asp.net上的文档但我无法理解它们是如何添加错误信息而且表单知道如何向用户显示错误。

我非常困惑。

1 个答案:

答案 0 :(得分:1)

您需要在控制器中使用ModelState.IsValid,并在视图中使用@Html.ValidationMessageFor(model => model.FirstName)

public ActionResult Index(ViewModel _Model) 
{ 
    // Checking whether the Form posted is valid one. 
    if(ModelState.IsValid) 
    { 
        // your model is valid here.
        // perform any actions you need to, like database actions,
        // and/or redirecting to other controllers and actions.
    }
    else 
    {
        // redirect to same action
        return View(_Model);
    } 
}

对于您的示例:

@model RoleCreatorAndEditor.Models.DatabaseModel
@{
    ViewData["Title"] = "Index";
}

<h2>User Information</h2>

<p>This is your user information!</p>
@using (Html.BeginForm("Index", "Home", FormMethod.Post)) {
    @Html.LabelFor(m=>m.FirstName)
    <br>
    @Html.TextBoxFor(m => m.FirstName)
    @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })

    <br>
    @Html.LabelFor(m=>m.LastName)
    <br>
    @Html.TextBoxFor(m=>m.LastName)
    @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })

    . . .

    <input type="submit" value="Save">
}

控制器:

[HttpPost]
public ActionResult Index(DatabaseModel model)
{
    if (ModelState.IsValid)
    {
        ListToDatatable convert = new ListToDatatable();
        DataTable user = convert.Convert(model);
        DatabaseRepository dbRepo = new DatabaseRepository();
        dbRepo.Upload(user);
    }
    return View(model);
}