htmlatattributes字典没有正确绑定



我有一个模型绑定问题与我正在编写的html助手。我已经在我的模型上声明了一个属性来处理html属性,简而言之;

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

然后我渲染下面的html在Scott Hanselman的帖子;

<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的对象感到困惑。正如我在Html helper源代码中观察到的那样,我确信我是按照惯例将我的htmlatattributes声明为Dictionary<string,object>的。我是不是漏掉了什么明显的东西?

编辑:

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

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

您的代码似乎是正确的。检查发送给服务器的<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; }

该值必须为string类型,以强制ModelBinder正确转换原始值

相关内容

  • 没有找到相关文章

最新更新