哪个错误的“Id”来自哪里?

时间:2009-09-21 14:07:52

标签: c# asp.net-mvc

我正在尝试使用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>
<% } %>

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

它试图将路径中的Id与您对象上的Id匹配 由于路由中的那个为null并且对象上的Id不可为空,因此会出现错误

刺激不是吗