繁体   English   中英

绑定列表类型时如何解析ModelState.IsValid = false?

[英]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>

要点: Post.cs | Tag.cs

我想包括这张图片,以便您可以直观地看到失败的原因。 每个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM