繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM