默认的模型绑定的名称将采用形式参数和性能匹配起来在参数列表中指定的类型。例如,您的模型具有属性“价格”和“名称”,那么表单需要包含带有ids /名称“价格”和“名称”的输入(我怀疑它会进行不区分大小写的匹配)。活页夹使用反射将与这些键相关联的表单值转换为适当的类型,并将其分配给由参数指定类型的新创建对象的属性(同样由反射派生)。
实际上,你可以看看(和下载)源出于此,在http://www.codeplex.com/aspnet,但你必须从那里深入到MVC源。我会给DefaultModelBinder源代码的一个链接,但是它们的构建方式,我相信链接会随着修订版的介绍而变化。
因此,要回答你的问题,你需要有参数(可以隐藏)表单对应于要重新创建对象的属性上。将表单(在视图中)发布到控制器时,活页夹应使用表单参数重新构建指定类型的对象。如果您需要从表单参数中的值转换为对象属性,那么您可能需要实现自己的自定义模型联编程序。
[编辑]在回答你的第二个帖子:
比方说,我们希望有一个链接回使用自定义对象的动作。我们可以使用特定的密钥将自定义对象存储在TempData中(或者如果我们需要它,则可以通过多次回发持续更多时间)。然后,我们可以构建操作链接并将该对象的关键字作为值提供给匿名类中的ActionLink。这将作为请求参数传回密钥。在我们的操作中,我们可以使用此参数中的键从TempData中检索对象。
<%= Html.ActionLink(ViewData["CustomObject1",
"Select",
new { TempDataKey = ViewData["CustomObject1_Key"] }
) %>
public ActionResult Select()
{
Entity custObj = null;
string objKey = Request.Params["TempDataKey"];
if (!string.IsNullOrEmpty(objKey))
{
custObj = (Entity)TempData[objKey];
}
... continue processing
}
太棒了!这就像一个魅力!我正在研究如何让它看起来更简单一些,但现在它完美地起作用:) – 2008-11-18 08:26:53