将模型属性传递给局部视图时如何保持正确的模型绑定行为?

时间:2012-05-31 12:04:52

标签: asp.net-mvc partial-views model-binding mvc-editor-templates

在ASP.NET MVC中,我想重用一组常用的信用卡字段,方法是将它们放在局部视图中,然后在父视图中将该局部视图渲染到另一个窗体中。

问题在于,如果CreditCard对象是模型的一部分,它本身就是一个复杂的对象,当我将其传递给部分视图时,在表单提交时,字段名称将缺少父属性名称前缀,允许默认模型绑定器将字段映射到复杂对象的正确属性。

以部分视图呈现的信用卡字段(行为不正确):

@Html.RenderPartial("~/Views/Pay/CCForm.cshtml", Model.CreditCard ,
 new ViewDataDictionary());

帖子字符串:

PayOption = 1&安培; CreditCardNumberPlainText = 0000000000000&安培; StartDateMm = 03&安培; StartDateYyyy = 2008&安培; ExpiryDateMm = 03&安培; ExpiryDateYyyy = 2017&安培; SecurityCode = 111&安培; IssueNumber = 1和X-请求-随着= XMLHttpRequest的

标准格式(正确行为),其中信用卡字段在主视图中呈现,字段如下:

@Html.TextBoxFor(x => x.CreditCard.IssueNumber, new {@maxlength = 3, @size = 3})

发布字符串:

PayOption = 1&安培; CreditCardInfo.CreditCardNumberPlainText = 0000000000000000&安培; CreditCardInfo.StartDateMm = 02&安培; CreditCardInfo.StartDateYyyy = 2009&安培; CreditCardInfo.ExpiryDateMm = 04&安培; CreditCardInfo.ExpiryDateYyyy = 2014&安培; CreditCardInfo.SecurityCode = 111&安培; CreditCardInfo.IssueNumber = 1&安培; X -Requested-随着= XMLHttpRequest的

1 个答案:

答案 0 :(得分:4)

为什么不为这个CreditCard类创建一个EditorTemplate,然后在父视图中使用它

E.G。

EditorTemplate:CreditCard.cshtml文件夹中EditorTemplates文件夹中的Shared 在此文件中添加CreditCard的编辑字段。像这样:

@Html.EditorFor(x => x.IssueNumber)
//........... So on.

然后在你看来只需致电:

@Html.EditorFor(x => x.CreditCard)