我正在尝试使用MVC beta 2并在控制器中使用以下方法:
[HttpPost]
public ActionResult Create(Issue issue) {
if(TryUpdateModel(issue, "Model", new [] {"Title", "Description"})) {
ServiceCaller.PutIssue(issue);
return RedirectToAction("Index");
}
return RedirectToAction("Create");
}
TryUpdateModel总是失败,并且ModelState在名为“Id”的Key下有一个错误,该错误表示“需要一个值”。视图不包含Id输入字段,我理解TryUpdateModel上的“include”参数应该忽略除了明确包含的字段之外的任何内容。将方法签名更改为以下内容可以解决问题,但我想了解“Id”字段是如何包含在首位的。
public ActionResult Create([Bind(Exclude = "Id")]Issue issue)
为了完整性,这里是View(它是EditorTemplates文件夹中的共享视图):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Tracker.Processing.Model.Issue>" %>
<% using (Html.BeginForm(Model.Id > 0 ? "Edit" : "Create", "Issue", FormMethod.Post)) { %>
<p>
<%= Html.LabelFor(i => i.Title) %>
<%= Html.EditorFor(i => i.Title) %>
</p>
<p>
<%= Html.LabelFor(i => i.Description) %>
<%= Html.TextArea("Description", Model.Description, new{ style = "width: 100%;" }) %>
</p>
<p>
<input type="submit" value="Save" />
</p>
<% } %>
有什么想法吗?
答案 0 :(得分:2)
它试图将路径中的Id与您对象上的Id匹配 由于路由中的那个为null并且对象上的Id不可为空,因此会出现错误
刺激不是吗