[英]How do I resolve ModelState.IsValid = false while binding a List type?
我从包含具有自己ID的类对象的列表中获取ModelState.IsValid = false。
我已经看到了一些有关如何在绑定时从[HttpPost]
方法中排除类属性的示例,如下所示:
[Bind(Exclude="Id,SomeOtherProperty")]
与List一样,如何排除属于属性的ID? 或者,如果有更好的方法可以解决此问题,请说明一下该主题。
这是我的PostController.cs :
[HttpPost]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Create([Bind(Include = "Title,URL,IntroText,Body,Created,Modified,Author,Tags")] Post post)
{
if (ModelState.IsValid) /*ModelState.IsValid except for its not... */
{
// this is failing so I unwrapped the code below temporarily
}
using (UnitOfWork uwork = new UnitOfWork())
{
var newPost = new Post
{
Title = post.Title,
URL = post.URL,
IntroText = post.IntroText,
Body = replace,
Author = post.Author,
Tags = post.Tags
};
uwork.PostRepository.Insert(newPost);
uwork.Commit();
return RedirectToAction("Index", "Dashboard");
}
return RedirectToAction("Index", "Dashboard");
}
更新:我的Create.cshtml的相关摘录(原来是问题所在。)
<div class="form-group">
@Html.LabelFor(model => model.Tags, htmlAttributes: new { @class = "control-label col-md-2 col-md-offet-3" })
<div class="col-md-7">
@for (var i = 0; i < 4; i++)
{
@Html.HiddenFor(m => m.Tags[i].Id)
@Html.EditorFor(model => model.Tags[i].Name)
}
</div>
</div>
我想包括这张图片,以便您可以直观地看到失败的原因。 每个Tag[i].Id
标记都导致无效状态。
要重述我的问题,如何从POST方法中省略List<Tag>
ID并达到有效状态?
正如@StephenMuecke在OP的评论中指出的那样。 我只需要从“视图”中删除该字段:
@Html.HiddenFor(m => m.Tags[i].Id)
现在,ModelState.IsValid返回true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.