我在一个表单中有一些禁用的输入,我想将它们发送到服务器,但Chrome将它们从请求中排除。
在不添加隐藏字段的情况下,有什么解决办法吗?
<form action="/Media/Add">
<input type="hidden" name="Id" value="123" />
<!-- this does not appear in request -->
<input type="textbox" name="Percentage" value="100" disabled="disabled" />
</form>
带有disabled属性的元素不会被提交,或者您可以说它们的值没有被发布(参见HTML 5规范中关于构建表单数据集的步骤3下的第二个要点)。
也就是说,
<input type="textbox" name="Percentage" value="100" disabled="disabled" />
供参考,根据HTML 4规范中的17.12.1:
禁用控件无法接收焦点。
在选项卡导航中跳过禁用控件。
无法成功张贴已禁用的控件。
你可以使用readonly属性在你的情况下,通过这样做,你将能够发布你的字段的数据。
也就是说,
<input type="textbox" name="Percentage" value="100" readonly="readonly" />
供参考,根据HTML 4规范中的17.12.2:
只读元素接收焦点,但用户不能修改。
选项卡导航中包含只读元素。
只读元素被成功发布。
带有disabled属性的元素不会被提交,或者您可以说它们的值没有被发布(参见HTML 5规范中关于构建表单数据集的步骤3下的第二个要点)。
也就是说,
<input type="textbox" name="Percentage" value="100" disabled="disabled" />
供参考,根据HTML 4规范中的17.12.1:
禁用控件无法接收焦点。
在选项卡导航中跳过禁用控件。
无法成功张贴已禁用的控件。
你可以使用readonly属性在你的情况下,通过这样做,你将能够发布你的字段的数据。
也就是说,
<input type="textbox" name="Percentage" value="100" readonly="readonly" />
供参考,根据HTML 4规范中的17.12.2:
只读元素接收焦点,但用户不能修改。
选项卡导航中包含只读元素。
只读元素被成功发布。
从语义上看,这似乎是正确的行为
我会问自己“为什么我需要提交这个值?”
如果您在表单上禁用了输入,那么您大概不希望用户直接更改值
在禁用的输入中显示的任何值都应该是
生成表单的服务器上的值的输出,或者
如果表单是动态的,则可以从表单上的其他输入进行计算
假设处理表单的服务器与为表单提供服务的服务器相同,那么用于再现禁用输入的值的所有信息都应该在处理时可用
事实上,为了保持数据完整性——即使禁用输入的值被发送到处理服务器,您也应该对其进行验证。无论如何,这种验证需要与您重新生成值所需的相同级别的信息!
我几乎认为只读输入也不应该在请求中发送
很高兴被纠正,但我能想到的所有需要提交只读/禁用输入的用例实际上只是伪装的样式问题
用RGBA值定义颜色
在样式下添加以下代码
<!DOCTYPE html>
<html>
<head>
<style>
#p7 {background-color:rgba(215,215,215,1);}
</style>
</head>
<body>
Disabled Grey none tranparent
<form action="/Media/Add">
<input type="hidden" name="Id" value="123" />
<!-- this does not appear in request -->
<input id="p7" type="textbox" name="Percentage" value="100" readonly="readonly"" />
</form>
结果