默认模型绑定按名称获取表单参数,并将它们与参数列表中指定的类型的属性匹配。例如,您的模型具有属性“价格”和“名称”,那么表单需要包含带有 ids/名称“价格”和“名称”的输入(我怀疑它不区分大小写匹配)。绑定器使用反射将与这些键关联的表单值转换为适当的类型,并将其分配给参数指定类型的新创建对象的属性(再次通过反射派生)。
您实际上可以在http://www.codeplex.com/aspnet查看(并下载)源代码,尽管您必须从那里深入了解 MVC 源代码。我会提供一个指向 DefaultModelBinder 源的链接,但是它们的构造方式,我相信链接会随着修订的引入而改变。
因此,要回答您的问题,您需要在表单上包含与您要重新创建的对象的属性相对应的参数(可以隐藏)。当您将表单(在视图中)发布到控制器时,活页夹应使用表单参数重构指定类型的对象。如果您需要将表单参数中的值转换为对象属性,您可能需要实现自己的自定义模型绑定器。
[编辑] 回应您的第二篇文章:
假设我们想要一个链接返回到使用自定义对象的操作。我们可以使用特定的键将自定义对象存储在 TempData(或 Session,如果我们需要它通过多个回发持续更长时间)。然后我们可以构造动作链接并将对象的键作为值提供给匿名类中的 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
}