【发布时间】:2015-02-18 00:11:16
【问题描述】:
我有一个使用 Razor 模板用 C# MVC 编写的项目。在我的一个页面上,我有几个包含数值的输入字段。设置这些输入字段值的 Razor 代码如下所示:
@Html.Editor(Model.DesignParams[i].ParamId,
new {
htmlAttributes = new
{
@Value = Model.DesignParams[i].DefaultValue,
@class = "form-control text-right",
@type = "text",
id = "_" + Model.DesignParams[i].ParamId,
uomid = Model.DesignParams[i].UOMId,
measureid = Model.DesignParams[i].MeasureId
}
})
以上代码使用 FireFox 和 Chrome 可以正常工作,并生成如下所示的输入字段:
<input type="text" uomid="MBH" name="HeatOfRejection" measureid="HeatLoad"
id="_HeatOfRejection" class="form-control text-right text-box single-line"
value="5000.0">
但是相同的 Razor 代码,相同的 @Model 值在 IE 中查看会生成:
<input Value="5000" class="form-control text-right text-box single-line"
id="_HeatOfRejection" measureid="HeatLoad" name="HeatOfRejection"
type="text" uomid="MBH" value="" />
如您所见,为 IE 生成的 value= 属性之间的区别在于,获取我的实际值的 value 属性以大写的“V”开头,而小写的值是空字符串。我被这件事难住了……
谁能告诉我为什么会发生这种情况以及如何处理它?
这种差异会影响 jQuery 返回输入值的能力:
var value = $(inputfield).attr("value");
也许.val() 将检索输入字段值,但这需要重写支持此页面和其他页面的核心 jQuery 代码,所以我想问是否有人能告诉我为什么这个 'Value=' 得到仅为 IE 创建,如果有解决问题的方法。
更新:
在 Firefox 和 IE 中将 @Value 更改为 @value(或只是 value)会导致 value 属性为空:
<input type="text" value="" uomid="MBH" name="HeatOfRejection" measureid="HeatLoad"
id="_HeatOfRejection" class="form-control text-right text-box single-line">
【问题讨论】:
-
你为什么要绑定到属性然后尝试用另一个属性的值覆盖它的值。在返回初始视图之前,只需在控制器中将
ParamId的值设置为DefaultValue的值。您的代码的副作用是用户输入一个值(例如 4000.0)然后提交。如果您因为(比如说)验证错误而返回视图,用户的值将被 5000.0 覆盖 - 肯定会惹恼您网站的用户。
标签: html asp.net-mvc-4 internet-explorer razor input-field