我与MVC Beta 2中的实验并在控制器下面的方法:错误的“Id”从哪里来?
[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输入字段,我明白我的TryUpdateModel上的“include”参数应该忽略除明确包含的字段以外的任何内容。将方法签名更改为以下内容可以解决问题,但我想了解“Id”字段是如何包含在第一位的。
public ActionResult Create([Bind(Exclude = "Id")]Issue issue)
为了完整起见,这里的视图(它在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>
<% } %>
任何想法?
您的“问题”类是否有“ID”字段? – 2009-09-21 14:10:10
它的确如此。这是类型:长。 Create(Get)控制器方法将新的Issue()传递给ID设置为0的视图; – grenade 2009-09-21 14:13:13