[英]How do I submit disabled input in ASP.NET MVC?
如何在 ASP.NET MVC 中提交禁用的输入?
你不能让字段readonly="readonly"
而不是disabled="disabled"
吗? 只读字段值将提交给服务器,同时用户仍不可编辑。 SELECT
标签是一个例外。
谢谢大家:
我解决这个问题的方式:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
笔记:
我在答案中得到了这些信息,但我得到了编辑。
@ppumkin 在他对这个答案的评论中提到了这一点,但我想强调它,因为我无法找到有关从禁用的<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
。
通常,如果我有一个“只读”字段但需要提交回服务器,我将禁用显示(或简单的文本),然后添加一个具有相同名称的隐藏字段。 您仍然需要确保该字段实际上并未在服务器端修改——只是不要在您的操作中从模型更新它——但是如果出现错误,模型状态仍然是准确的。
您还可以在表单提交之前使用这样的代码:
$(":disabled", $('#frmMain')).removeAttr("disabled");
根据设计浏览器不支持。
要么将它们设置为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>
您可以创建一个像下面这样的编辑器模板
CSS
.disabled {
background-color:lightgray;
}
编辑器模板
@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })
这将有助于在 ASP.net 中提交模型值:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
当我们处理禁用但选中的复选框并且我们想要发布值时,我们需要确保我们的隐藏字段出现在@Html.CheckBoxFor 隐藏字段之前。
以下是我找到答案的链接。 http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
我通常对 CheckBox 或 CheckBoxFor 使用这种方式,因为禁用它会导致丢失值。 Readonly 也不适用于复选框。
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
扩展 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
});
只需将此脚本放在页面中的@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>
只需在链接到该视图的 ViewModel 中将该属性设为 [Required]。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.