6

我正在为我的视图使用强类型模型。我有一个禁用的文本框,我使用 javascript 更新其值。使用此呈现文本框

<%: Html.TextBoxFor(model => model.TotalAmount, new { disabled = "disabled"})%>

这将呈现一个名称和 ID 为“TotalAmount”的文本框。TotalAmount 也是我模型上绑定到此视图的属性。

在视图中更新其值的 javascript 在其函数中是这样的:

document.getElementById('TotalAmount').value = {assigning new value here};

该函数确实被调用,当我在另一个可编辑文本框中更改某些值时,我可以看到禁用文本框中的值。但是,当我将此表单发布到我的操作方法时,如下所示:

[HttpPost]
public ActionResult Process (ProcessVM FormPostVM)
{
}

禁用的文本框属性 [TotalAmount] 仍然具有旧值,但我修改的可编辑文本框包含我输入的新值。为什么禁用的文本框不包含 javascript 更新值?

我尝试使用

ModelState.Remove("TotalAmount");

在上面的操作方法中,但我已经认为它不起作用。

任何线索,提示?

谢谢你的时间....

4

5 回答 5

25

提交表单时,具有该属性的 HTML 输入元素(例如文本框)disabled="disabled"永远不会将其值发送到服务器。如果您想将值发送到服务器,同时仍然禁止用户更改它,您可以制作文本框readonly

<%= Html.TextBoxFor(model => model.TotalAmount, new { @readonly = "readonly" }) %>
于 2012-05-04T13:13:27.733 回答
4

禁用的输入永远不会在表单提交中发送,请尝试使用readonly属性或隐藏输入

于 2012-05-04T13:13:45.943 回答
4

禁用的字段不会被发布。尝试有一个隐藏的表单域,它将值发送到服务器,并设置 TotalAmount 和隐藏的表单域。在服务器上,改为使用隐藏字段的值。

附带说明一下,由于这看起来像订单总数,所以我会在服务器上重新计算,而不是打开有人破解 html 并获得他们产品折扣的可能性。

编辑: 就其他人而言,我忘记了 readonly 属性。那也行。

于 2012-05-04T13:15:32.873 回答
3

如果您将其更改为使用readonly而不是disabled,那么这应该为您提供相同的功能,但发布值。

于 2012-05-04T13:13:29.233 回答
1

正如您所发现的,浏览器不会将值返回到禁用的输入控件中。解决此问题的最简单方法可能是挂钩表单提交,并在提交表单时重新启用输入;用户将没有机会编辑该值,它应该与请求的其余部分一起发布。

我认为最后一个问题描述了它:请检查一下:

检索 asp:TextBox 的值

于 2013-09-01T16:13:33.207 回答