4

在 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-Requested-With=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.IssHttpNumber.Request=111&XCreditCardInfo.

4

1 回答 1

4

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

例如

EditorTemplate:CreditCard.cshtmlEditorTemplates文件夹中的文件夹中,Shared在此文件中添加 CreditCard 的编辑字段。像这样的东西:

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

那么在您看来,只需致电:

@Html.EditorFor(x => x.CreditCard)
于 2012-05-31T12:14:22.957 回答