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

当前回答

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

所以形式是:

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

其他回答

如果你绝对必须有字段禁用和传递数据,你可以使用javascript输入相同的数据到一个隐藏字段(或只是设置隐藏字段太)。这将允许您禁用它,但仍然可以发布数据,即使您要发布到另一个页面。

use

<input type="textbox" name="" value="100" disabled/>

or

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

如果你使用像PHP Laravel这样的框架,没有name属性的元素将读为unset

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

你可以完全避免禁用,这是痛苦的,因为html表单格式不会发送任何相关的<p>或一些其他标签。

所以你可以写成regular

<input text tag just before you have `/>

添加这个 只读的=“readonly”

它不会禁用您的文本,但不会由用户更改,因此它像<p>一样工作,并将通过表单发送值。如果你想让它更像<p>标签,只需删除边框

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

所以形式是:

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

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

<script>

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

    //Rest of code
    })
</script>