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 Helpers 源代码中观察到的那样,我确信我通过将 htmlAttributes 声明为 来遵循约定 。我在这里遗漏了一些明显的东西吗?

编辑:

只是更新以提供更多信息。我看到的绑定问题是 JQuery AJAX 后$.post回调的结果,其中数据正在使用 JQuery 的 .serialize(); 进行序列化;在检查正在发送的数据时,一切看起来都井井有条。

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 回答