如何在ASP.NET MVC中提交禁用的输入?

时间:2010-04-23 17:38:44

标签: c# .net javascript asp.net-mvc

如何在ASP.NET MVC中提交禁用的输入?

13 个答案:

答案 0 :(得分:132)

你不能使用readonly="readonly"字段代替disabled="disabled"吗?只读字段值将提交给服务器,同时仍然是用户不可编辑的。 SELECT标记是个例外。

答案 1 :(得分:36)

感谢大家:

我解决这个问题的方式:

document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";

注意:

我在答案中得到了这些信息,但我编辑了。

答案 2 :(得分:25)

@ppumkin在对this answer的评论中提到了这一点,但我想强调一下,因为我无法找到有关从已禁用的<select>提交数据的其他资源。我也认为它与问题有关,因为选择不是<input>,而是“输入”。

  

只需为禁用的选择包含一个隐藏字段,并将其全部排序。

示例:

@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@

警告:这会在页面上放置两个具有相同ID的标签,这不是真正有效的HTML,并且可能会导致javascript令人头疼。对我来说,我有javascript通过其html id来设置下拉列表的值,如果你把隐藏字段放在第一位,javascript就会找到而不是select

答案 3 :(得分:18)

通常,如果我有一个“只读”字段但需要提交回服务器,我将禁用显示(或简单地显示文本),但随后添加一个具有相同名称的隐藏字段。您仍然需要确保在服务器端实际上没有修改该字段 - 只是不要在操作中从模型中更新它 - 但是如果有错误,模型状态仍然是准确的。

答案 4 :(得分:11)

您也可以在表单提交之前使用这样的代码:

$(":disabled", $('#frmMain')).removeAttr("disabled");

答案 5 :(得分:6)

您可以创建一个类似下面的编辑器模板

CSS

.disabled {
    background-color:lightgray;
}

编辑模板

@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })

答案 6 :(得分:2)

当我们处理禁用但已选中的复选框并且我们要发布值时,我们需要确保隐藏字段出现在@ Html.CheckBoxFor隐藏字段之前。

以下是我找到答案的链接。 http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033

答案 7 :(得分:1)

根据设计,浏览器不支持。

将它们设置为readonly即可将值提交到服务器 或者,如果您要处理的控件仍然可以与readonly属性(例如Select)一起使用,请添加css样式pointer-events: none;以使其不交互

有点黑,但是行得通!当您直接使用“提交”按钮提交表单而不使用javascript时,它也可以使用。不需要额外的工作!

例如:

<select asp-for="TypeId" 
   asp-items="@(new SelectList(await TypeRepository.FetchTypesAsync(), "TypeId", "Name"))"
   class="form-control form-control-sm" 
   readonly 
   style="pointer-events: none;">
</select>

答案 8 :(得分:0)

我通常对CheckBox或CheckBoxFor使用这种方式,因为将其禁用会导致丢失值。只读在复选框上也不起作用。

@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)

答案 9 :(得分:0)

扩展Tasos'(“:disabled”,$('#xxxForm'))。removeAttr(“ disabled”);您可以使用:

$("#xxxForm").submit(function (e) {
    e.preventDefault();
    var form = this;
    $('#Field1')[0].disabled = false;
    $('#Field2')[0].disabled = false;
    ...
    $('#FieldN')[0].disabled = false;
    form.submit(); // submit bypassing the jQuery bound event
});

答案 10 :(得分:0)

$(“#iD”)。attr(“ style”,“指针事件:无; background-color:rgb(220,220,220)”);

这将有助于在asp.net中提交模型值。

答案 11 :(得分:0)

只需将此脚本放在页面的@section脚本中即可。 这将在您提交页面时启用输入,并且您应在提交后将用户重定向到另一个页面。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js">
$("form").submit(function () {
                    if ($('form').valid()) {
                        $("input").removeAttr("disabled");
                    }
                });
</script>

答案 12 :(得分:-2)

只需在链接到该视图的ViewModel中设置该属性[必需]。