【发布时间】:2017-07-21 00:30:35
【问题描述】:
我有一个“MovieForm”表单,用于将电影添加到数据库。当我填写所有必需的输入并按下保存按钮时,电影会正常添加到数据库中。如果我首先将一个或多个必需的输入留空,然后按保存,我会收到 DataAnnotations 错误消息,“ModelState.isValid”变为错误并重定向我已使用此代码的相同表单:
[HttpPost]
public ActionResult Save(Movie movie)
{
if (!ModelState.IsValid)
{
return View("MovieForm");
}
//logic for saving movie
}
这就是它应该做的。此操作后会出现问题。现在,当我填写所有必需的输入并再次按下保存按钮时,ModelState.IsValid 没有更新并且它仍然是错误的,所以我陷入了这个 if 语句。
如何重置它,以便再次检查是否满足要求?
型号:
public class Movie
{
[Key]
public Guid MovieID { get; set; }
[Required]
[StringLength(40)]
public string Title { get; set; }
[Required]
[StringLength(60)]
public string Director { get; set; }
[Required]
[StringLength(256)]
public string Actors { get; set; }
}
查看
@using Cinema.Models
@model Cinema.Models.Movie
@using (Html.BeginForm("Save", "Movies", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
<div class="form-group">
@Html.LabelFor(m => m.Title, "Title", new { @class = "col-md-2 control-label" })
<div class="col-md-8">
@Html.TextBoxFor(m => m.Title, new { @class = "form-control col-md-4" })
@Html.ValidationMessageFor(m => m.Title, "", new { @class = "text-danger col-md-4 form-control-static" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Director, "Director", new { @class = "col-md-2 control-label" })
<div class="col-md-8">
@Html.TextBoxFor(m => m.Director, new { @class = "form-control col-md-4" })
@Html.ValidationMessageFor(m => m.Director, "", new { @class = "text-danger col-md-4 form-control-static" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Actors, "Actors ", new { @class = "col-md-2 control-label" })
<div class="col-md-8">
@Html.TextBoxFor(m => m.Actors, new { @class = "form-control col-md-4" })
@Html.ValidationMessageFor(m => m.Actors, "", new { @class = "text-danger col-md-4 form-control-static" })
</div>
</div>
@Html.HiddenFor(m => m.MovieID)
<div class="form-group">
<div class="col-md-offset-2 col-md-4">
<input type="submit" class="btn btn-default" value="Save" />
<a class="col-md-offset-1" href="/Movies/">cancel</a>
</div>
</div>
}
【问题讨论】:
-
这根本不可能,除非您有其他代码导致问题。还要注意它应该是
return View("MovieForm", movie); -
好吧,我进行了调试,一旦
ModelState.isValid获得值false,当具有所有有效值的对象movie传递给Save操作时,它不会更改/更新它。我也尝试按照您的建议添加电影,但没有解决问题。 -
您没有显示任何相关代码,因此我们无法猜测您犯了什么错误。
-
我不确定您希望我显示什么代码?除了这个动作之外,唯一与之相关的就是
MovieForm本身。 -
显示模型和视图。
ModelStateIsValid不能是false,除非您的模型无效。但首先在您的 POST 方法中包含var errors = ModelState.Keys.Where(k => ModelState[k].Errors.Count > 0).Select(k => new { propertyName = k, errorMessage = ModelState[k].Errors[0].ErrorMessage });以准确检查哪些属性无效
标签: c# asp.net asp.net-mvc validation