如何在ASP.NET MVC中提交禁用的输入?
答案 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中设置该属性[必需]。