Dar*_*rov 149

你不能做场readonly="readonly"而不是disabled="disabled"吗?只读字段值将提交给服务器,同时仍然是用户不可编辑的.一个SELECT标签是个例外,虽然.

  • 做了.net asp 4年了,我从来不知道残疾人输入没有得到回复......那是怎么过的?只需为禁用的选择包含一个隐藏字段,并将其全部排序.(即使ID在表单上重复,也是不允许的) (21认同)
  • 这不适用于`<select>`框. (5认同)
  • 这对于`type ="checkbox"`输入也不起作用 (5认同)

San*_*tos 37

谢谢大家:

我解决这个问题的方式:

document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
Run Code Online (Sandbox Code Playgroud)

注意:

我得到了关于答案的这些信息,但我编辑了.

  • 不使用复选框控件 (2认同)

DLe*_*Leh 28

@ppumkin在对这个答案的评论中提到了这一点,但我想强调它,因为我无法找到有关从残疾人提交数据的其他资源<select>.我也相信它与问题有关,因为选择不是<input>s而是它们是"输入".

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

例:

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

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


tva*_*son 19

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

  • 您的解决方案的一个问题是,如果禁用了javascript,它会中断.注入隐藏字段服务器端没有此问题. (4认同)

Dha*_*iya 14

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

$(":disabled", $('#frmMain')).removeAttr("disabled");
Run Code Online (Sandbox Code Playgroud)

  • 我用这个,不需要担心隐藏的元素,不确定是否有任何缺点,除了由于js功能可能会稍微延迟回发 (2认同)
  • 针对许多关于使用只读而非禁用的答案,我相信在许多情况下我们需要使用禁用,我在类似的问题中阅读了大约15个答案,并选择了这个只有自己的jQuery过滤器来选择适当的元素来删除禁用的属性,很棒谢谢. (2认同)

Pir*_*ate 9

根据设计浏览器不支持。

要么使它们readonly允许向服务器提交值,要么如果您正在处理仍然可以使用readonlySelect 等属性的控件,请添加 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>
Run Code Online (Sandbox Code Playgroud)


joe*_*ger 6

您可以创建如下所示的编辑器模板

CSS

.disabled {
    background-color:lightgray;
}
Run Code Online (Sandbox Code Playgroud)

编辑模板

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