MVC下拉列表readonly不起作用

时间:2013-10-22 15:06:22

标签: c# asp.net-mvc html-select

以下是生成下拉列表的代码(在视图中)

@Html.DropDownList("feeTypes", null, new { @disabled = false })

当我将false更改为true时,上面的行正常工作,但是当我设置为false时,它也被禁用(即每当我输入true或false时,下拉列表总是被禁用)

为什么会出现上述情况?

我真正想做的是制作一个可以按程序启用或禁用的下拉列表,有没有其他方法可以实现这一目标?

7 个答案:

答案 0 :(得分:5)

如果存在,则禁用属性将禁用,无论值如何。你最终因为这个原因而在剃刀中有条件:

@if(disabled){
    Html.DropDownList("feeTypes", null, new { @disabled = false })
}
else{
    Html.DropDownList("feeTypes", null)
}

答案 1 :(得分:3)

修改

您可以将disabled设置为null(或者可能是空字符串),然后不会呈现该属性。

@Html.DropDownList("feeTypes", null, cond ? new { @disabled = "" } : null)

其中cond为真或假

下面的讨论以一个错误的版本开始。它现在已经修复和测试了!

答案 2 :(得分:2)

你需要它:

@Html.DropDownList("feeTypes", null, new { @disabled = "disabled" })

如果您希望启用下拉菜单,则根本不需要disabled属性,请执行以下操作:

@Html.DropDownList("feeTypes", null)

如果您希望能够在2之间切换,请考虑使用一些JavaScript / jQuery

答案 3 :(得分:2)

“disabled = false”有点多余。在生成的标记中,对于的元素被禁用,那么您根本不需要disabled属性。例如:

禁用元素:

@Html.DropDownList("feeTypes", null, new { @disabled = true })

未禁用的元素:

@Html.DropDownList("feeTypes")

没有HTML标记来指定“这未被禁用”。相反,在指定disabled属性之前,默认情况下不会禁用元素。

答案 4 :(得分:1)

禁用属性它实际上不需要激活任何参数。只有提到禁用(没有任何参数),它才会禁用DOM元素

<input type="text" disabled />

由于未验证非参数属性,我们通常会将参数添加为xhtml有效

<input type="text" disabled="ItDoesntReallyMatter" />

你需要做的是使用jquery或简单的javascript从元素中完全删除属性。

document.getElementsByTagName("feeTypes")[0].removeAttribute("disabled ");

答案 5 :(得分:1)

如果要重新启用它,请删除disabled属性。没有disabled="enabled"之类的东西。即使像<input type="text" disabled />这样的标记也会在现代浏览器中禁用您的输入。

有关详细信息,请参阅the html5 reference

答案 6 :(得分:0)

将readonly放在您的下拉列表中后,将其置于样式标记内..

<style>
 select[readonly] option, select[readonly] optgroup {
        display: none;
    }
<style>