2

为什么此用户控件会对撇号进行编码?这是造成Jquery模板的问题。撇号从AJAX请求编码为'ASP.NET MVC用户控件和正在编码的撇号

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

回答

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扩展方法的途径和覆盖任何行为,你不喜欢。