1

私が書いている html ヘルパーにモデル バインディングの問題があります。私は自分のモデルでhtml属性を処理するプロパティを宣言しました。

public IDictionary<string,object> HtmlAttributes { get; set; }

次に、 Scott Hanselman の投稿のように次の html をレンダリングします。

<input type="hidden" id="HtmlAttributes[0]_Key" name="HtmlAttributes[0].Key" value="align" />
<input type="hidden" id="HtmlAttributes[0]_Value" name="HtmlAttributes[0].Value" value="center" />

しかし、コールバック時に、DefaultModelBinder は値を文字列配列として作成します。これにより、次に html 値をレンダリングするときに;

_attribute.Value.ToString()

次の HTML を取得します。

<td align="System.String[]"></td>

これは明らかに、文字列配列のデフォルトの ToString 表現です。値は最初の要素です!!

ディクショナリのオブジェクトとして宣言されている値型パラメーターについて、デフォルトのモデル バインダーが混乱しているようです。Dictionary<string,object>Html ヘルパーのソース コードで確認したように、htmlAttributes を として宣言することで、規則に従っていると確信してい ました。ここで明らかな何かが欠けていますか?

編集:

より多くの情報を提供するための更新です。私が見ているバインディングの問題は$.post、データが JQuery の .serialize(); を使用してシリアル化されている JQuery AJAX ポスト コールバックの結果です。送信されたデータを検査すると、すべてが正常に見えます。

HtmlAttributes%5B0%5D.Key=align&HtmlAttributes%5B0%5D.Value=center& ...
4

1 に答える 1

0

あなたのコードは正しいようです。<form>サーバーに送信されたことを確認します。二重の名前がある可能性が高いHtmlAttributes[0].Value

<input name="HtmlAttributes[0].Value" ... ... <input name="HtmlAttributes[0].Value" ...

それは、単一の値ではなく複数の値になります...つまりSystem.String[]

編集:問題は

公開を変更するIDictionary<string,object> HtmlAttributes { get; set; }

の中へ

IDictionary<string,string> HtmlAttributes { get; set; }

ModelBinder に生の値を強制的に修正させるには、値を文字列型にする必要があります。

于 2013-06-08T10:26:55.163 に答える