Asp.net mvc 由javascript更新的asp.net mvc禁用文本框不会发布新值
我在视图中使用强类型模型。我有一个禁用的文本框,我使用javascript更新它的值。文本框是使用以下方式呈现的Asp.net mvc 由javascript更新的asp.net mvc禁用文本框不会发布新值,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我在视图中使用强类型模型。我有一个禁用的文本框,我使用javascript更新它的值。文本框是使用以下方式呈现的 <%: Html.TextBoxFor(model => model.TotalAmount, new { disabled = "disabled"})%> 当我在另一个可编辑的文本框中更改某些值时,该函数确实会被调用,并且我可以在禁用的文本框中看到该值。但是,当我将此表格发布到我的行动方法时,如下所示: [HttpPost] public ActionResu
<%: Html.TextBoxFor(model => model.TotalAmount, new { disabled = "disabled"})%>
当我在另一个可编辑的文本框中更改某些值时,该函数确实会被调用,并且我可以在禁用的文本框中看到该值。但是,当我将此表格发布到我的行动方法时,如下所示:
[HttpPost]
public ActionResult Process (ProcessVM FormPostVM)
{
}
禁用的文本框属性[TotalAmount]仍然具有旧值,但我修改的可编辑文本框包含我输入的新值。为什么禁用的文本框不包含javascript更新值
我试着用
ModelState.Remove("TotalAmount");
在上面的操作方法中,但我已经发现它不起作用
有什么线索,提示吗
感谢您的时间….HTML输入元素,例如具有
disabled=“disabled”
属性的文本框,在提交表单时将永远不会将其值发送到服务器。如果要将值发送到服务器,同时仍禁止用户更改,可以将文本框设置为只读:
<%= Html.TextBoxFor(model => model.TotalAmount, new { @readonly = "readonly" }) %>
model.TotalAmount,新的{@readonly=“readonly”}]>
如果您将其更改为使用只读
而不是禁用
,则这将为您提供相同的功能,但会发布值。禁用的输入永远不会以表单提交的形式发送,请尝试改用只读
属性,或者隐藏的输入禁用的字段不会被发布。尝试使用一个将值发送到服务器的隐藏表单字段,并设置TotalAmount和隐藏表单字段。在服务器上,改为使用隐藏字段的值
另一方面,因为这看起来像订单总数,所以我会在服务器上重新评估这一点,而不是打开有人入侵html并从他们的产品中获得折扣的可能性
编辑:
另一方面,我忘记了readonly属性。这也会起作用。正如您所发现的,浏览器不会在禁用的输入控件中重新发布值。解决这个问题最简单的方法可能是钩住表单提交,并在表单提交时重新启用输入;用户将没有机会编辑该值,它应该与请求的其余部分一起发布 我认为上一期描述了它:请查看:
1分钟内有4个答案,它们都是正确的。@Darin Dimitrov,你说过“…永远不会将它们的值发送到服务器…”。这是一般规则还是MVC特有的?此外,您的解决方案也适用于文本框。关于
选择元素如何?@Anar,不,这与ASP.NET MVC无关。这是基本的HTML。所有输入元素都是如此,包括select
。问题是,select
不支持readonly
属性。我找到了一个解决方法,可以将dropdown的值存储在一个隐藏元素中。我不喜欢这种方法,但不幸的是,我不得不把它作为最后的手段。
<%= Html.TextBoxFor(model => model.TotalAmount, new { @readonly = "readonly" }) %>