我正在使用强类型模型进行观察。我有一个禁用的文本框,其值我使用javascript更新。文本框使用此
呈现<%: Html.TextBoxFor(model => model.TotalAmount, new { disabled = "disabled"})%>
这会将带有NAME和ID的文本框呈现为“TotalAmount”。 TotalAmount也是我的模型上绑定到此视图的属性。
在视图中更新其值的javascript在其函数中是这样的:
document.getElementById('TotalAmount').value = {assigning new value here};
该函数被调用,当我在另一个可编辑文本框中更改某个值时,我可以在禁用的文本框中看到该值。但是,当我将此表单发布到我的操作方法时,如下所示:
[HttpPost]
public ActionResult Process (ProcessVM FormPostVM)
{
}
已禁用的文本框属性[TotalAmount]仍具有旧值,但我修改的可编辑文本框包含我输入的新值。为什么禁用的文本框不包含javascript更新值?
我尝试使用
ModelState.Remove("TotalAmount");
在上面的动作方法中,但正如我已经认为它不起作用。
任何线索,提示?
谢谢你的时间......
答案 0 :(得分:23)
HTML输入元素(例如具有disabled="disabled"
属性的文本框在提交表单时永远不会将其值发送到服务器。如果您要将值发送到服务器,同时仍然禁止用户更改它,您可以创建文本框readonly
:
<%= Html.TextBoxFor(model => model.TotalAmount, new { @readonly = "readonly" }) %>
答案 1 :(得分:4)
禁用输入永远不会在表单提交中发送,请尝试使用readonly
属性或隐藏输入
答案 2 :(得分:4)
禁用字段不会发布。尝试使用隐藏的表单字段将值发送到服务器,并设置TotalAmount和隐藏的表单字段。在服务器上,使用隐藏字段的值。
另一方面,由于这看起来像订单总数,这是我在服务器上重新计算的东西,而不是开放某人黑客入侵html并获得产品折扣的可能性。
修改强> 对于其他人来说,我忘记了readonly属性。那也行。
答案 3 :(得分:3)
如果您将其更改为使用readonly
而不是disabled
,那么这应该为您提供相同的功能,但会发布该值。
答案 4 :(得分:1)
正如您所发现的,浏览器不会在禁用的输入控件中发布值。解决此问题的最简单方法可能是挂钩表单提交,并在提交表单时重新启用输入;用户将无法编辑该值,并且应该使用剩余的请求发布。
我认为最后一个问题描述了它:请查看: