mvc模型验证不需要在所有字段上工作

时间:2012-09-10 20:56:24

标签: asp.net-mvc

我在ASP.NET MVC 4中工作,我遇到的问题是我的模型验证无法正常工作。由于某些原因,我的所有必填字段都不得填写。

这是我的模特:

public class MovieModel
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public DateTime ReleaseDate { get; set; }
        [Required]
        public string Genre { get; set; }
        [Required]
        public decimal Price { get; set; }

        public virtual ICollection<RoleInMovie> RoleInMovie { get; set; }
    }

这是视图:

@using (Html.BeginForm())
{
    <table>
        <tr>
            <td>
                <label>Name:</label></td>
            <td>@Html.EditorFor(m => m.Name)</td>
            <td>@Html.ValidationMessageFor(m => m.Name)</td>
        </tr>
        <tr>
            <td>
                <label>Genre:</label></td>
            <td>@Html.EditorFor(m => m.Genre)</td>
            <td>@Html.ValidationMessageFor(m => m.Genre)</td>
        </tr>
        <tr>
            <td>
                <label>Price:</label></td>
            <td>@Html.EditorFor(m => m.Price)</td>
            <td>@Html.ValidationMessageFor(m => m.Price)</td>
        </tr>
    </table>
    <button type="submit">Submit</button>
}

这是我的行动:

[HttpPost]
        public ActionResult Add(MovieModel model)
        {
            if(ModelState.IsValid)
            {
                return RedirectToAction("Index");
            }
            return View();
        }

现在就是这样:只要我输入一个价格,modelstate.isvalid就变为真。当鼠标悬停在我的模型上时,它的名称和流派都是空的。当然,它们是必需的,但验证不起作用。 此外,验证消息仅适用于价格。

我希望我不会忽视太荒谬的事情。谢谢你的帮助!

1 个答案:

答案 0 :(得分:13)

将无效模型返回视图:

[HttpPost]
public ActionResult Add(MovieModel model)
{
    if(ModelState.IsValid)
    {
        return RedirectToAction("Index");
    }
    return View(model); // <----
}

哦,并确保所需属性不允许空字符串

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.allowemptystrings.aspx

public class MovieModel
{
    public int Id { get; set; }

    [Required(AllowEmptyStrings = false)]
    public string Name { get; set; }

    public DateTime ReleaseDate { get; set; }

    [Required(AllowEmptyStrings = false)]
    public string Genre { get; set; }

    [Required]
    public decimal Price { get; set; }

    public virtual ICollection<RoleInMovie> RoleInMovie { get; set; }
}