我在一个表单中有一些禁用的输入,我想将它们发送到服务器,但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>

当前回答

我发现这样更容易。只读输入字段,然后设置它的样式,以便最终用户知道它是只读的。放置在这里的输入(例如来自AJAX)仍然可以提交,不需要额外的代码。

<input readonly style="color: Grey; opacity: 1; ">

其他回答

我正在更新这个答案,因为它非常有用。只需将readonly添加到输入。

所以形式是:

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />
    <input type="textbox" name="Percentage" value="100" readonly/>
</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:

只读元素接收焦点,但用户不能修改。 选项卡导航中包含只读元素。 只读元素被成功发布。

简单的解决方法-只是使用隐藏字段作为选择,复选框和无线电占位符。

从这个代码到-

<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" /> 
    <select name="gender" disabled="disabled">
          <option value="male">Male</option>
          <option value="female" selected>Female</option>
    </select>

</form>

那个代码

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />

    <input type="textbox" value="100" readonly /> 

    <input type="hidden" name="gender" value="female" />
    <select name="gender" disabled="disabled">
          <option value="male">Male</option>
          <option value="female" selected>Female</option>
    </select>
</form>

用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>

结果

使用Jquery和ajax发送数据,你可以解决你的问题:

<script>

$('#form_id').submit(function() {
    $("#input_disabled_id").prop('disabled', false);

    //Rest of code
    })
</script>