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.SecurityCode = 111&CreditCardInfo.IsssueNumber = 1&

4

1 に答える 1

4

この CreditCard クラスの EditorTemplate を作成してから、親ビューで使用しないでください

例えば

EditorTemplate:フォルダ内のCreditCard.cshtmlフォルダに、このファイルに CreditCard の編集フィールドを追加します。このようなもの:EditorTemplatesShared

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

次に、ビューで次のように呼び出します。

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