Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 由javascript更新的asp.net mvc禁用文本框不会发布新值_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 由javascript更新的asp.net mvc禁用文本框不会发布新值

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

我在视图中使用强类型模型。我有一个禁用的文本框,我使用javascript更新它的值。文本框是使用以下方式呈现的

<%: 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" }) %>