2009-09-21 41 views
0

我与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> 
<% } %> 

任何想法?

+0

您的“问题”类是否有“ID”字段? – 2009-09-21 14:10:10

+0

它的确如此。这是类型:长。 Create(Get)控制器方法将新的Issue()传递给ID设置为0的视图; – grenade 2009-09-21 14:13:13

回答

2

它试图在给一个你的对象 上作为一个在路由的路由匹配的编号是空和你的对象ID是不可为空你的错误

刺激是不是

+0

啊!没有想到路线...... – grenade 2009-09-21 14:14:47

+0

想到了它,它应该是显而易见的,因为我使用相同的视图进行编辑,从路线中获取其ID。卫生署。 – grenade 2009-09-21 14:23:48