ASP.NET MVC用户控件和撇号正在编码

时间:2012-05-13 06:34:47

标签: ajax asp.net-mvc-3 character-encoding knockout.js partial-views

为什么此用户控件会对撇号进行编码?它导致Jquery模板出现问题。撇号从AJAX请求编码为'

    <script type="text/html" id="editTimeTemplate">
        @Html.TextBoxFor(q => q.Time, new { type = "text", maxlength = 8, data_bind = "value: editTime.time.time, time: { options : { defaultTime: '8:00', showPeriod: true, showLeadingZero: false} }" })
    </script>
    <script type="text/html" id="editTimeTemplate">
    <input data-bind="value: editTime.time.time, time: { options : { defaultTime: &#39;8:00&#39;, showPeriod: true, showLeadingZero: false} }" id="Time" maxlength="8" name="Time" type="text" value="" />
</script>

1 个答案:

答案 0 :(得分:4)

TextBoxFor内部使用TagBuilder,它将对所有属性值执行此编码。简单的解决方法是不使用辅助方法,而是使用HTML标记(我正在使用MVC4,因此您必须自己实现IdFor和NameFor方法)。


<input type="text" id="@Html.IdFor(m => m.Time)" name="@Html.NameFor(m => m.Time)" maxlength="8" data-bind="value: editTime.time.time, time: { options : { defaultTime: '8:00', showPeriod: true, showLeadingZero: false} }" />

当然只是:


<input type="text" id="Time" name="Time" maxlength="8" data-bind="value: editTime.time.time, time: { options : { defaultTime: '8:00', showPeriod: true, showLeadingZero: false} }" />

如果这让你很烦恼(或者你经常这么做),我会选择实现我自己的TexBoxFor扩展方法,并覆盖你不喜欢的任何行为。