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&