オブジェクトの 1 つに null 許容ブール値のプロパティがあります。ロジックで true を Yes、false を No、null を N/A にします。多くの異なるオブジェクトにこのような複数のプロパティを設定するので、エディタを作成してこれらのプロパティのテンプレートを表示するのが最も理にかなっています。これがすべて機能した後、jQuery UI を使用してボタンセットの視覚要素を適用しますが、今のところ、それは私の問題の範囲を超えています。私のエディター テンプレートは次のようになります。
@model bool?
<div data-ui="buttonset">
@Html.RadioButtonFor(x => x, true, new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "Yes"}) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))Yes">Yes</label>
@Html.RadioButtonFor(x => x, false, new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "No" }) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))No">No</label>
@Html.RadioButtonFor(x => x, "null", new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "NA" }) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))NA">N/A</label>
</div>
私の問題は、どのような状況でも、このエディター テンプレートでモデルの現在の値を正しく表示できないことです。このスコープではモデルのプロパティをレンダリングするのではなく、モデル自体をレンダリングしているため、MVC3 の組み込みロジックは、名前が空または null でないことを確認するために行われるチェックのために、checked プロパティを正しく設定しません (MVC3 を参照)。ソース、InputExtensions.cs:line#259)。モデルと比較してチェックされた属性を動的に設定することはできません。ブラウザは値ではなくチェックされた属性の存在でラジオボタンをチェックするため、ラジオボタンは次のように見えますが、最後のものがまだ選択されています.
<div class="span-4" data-ui="buttonset">
<input checked="checked" id="MyObject_BooleanValueYes" name="MyObject.BooleanValue" type="radio" value="True" /><label for="MyObject_BooleanValueYes">Yes</label>
<input checked="" id="MyObject_BooleanValueNo" name="MyObject.BooleanValue" type="radio" value="False" /><label for="MyObject_BooleanValueNo">No</label>
<input checked="" id="MyObject_BooleanValueNA" name="MyObject.BooleanValue" type="radio" value="null" /><label for="MyObject_BooleanValueNA">N/A</label>
</div><span class="field-validation-valid" data-valmsg-for="MyObject.BooleanValue" data-valmsg-replace="true"></span> </div>
if?truevalue:falsevalue
真/偽の部分が異なる匿名型になり、エラーが発生するため、次のようなものを使用して HtmlAttribute を条件付きで追加することはできません。
私はこれをどのように行うべきかについて苦労しています。この問題に取り組む方法について提案があることを願っていますか?