在Razor视图中启用和禁用文本框(ASP.Net MVC 3)

19

我想根据值(Model.CompanyNameEnabled)启用或禁用文本框。

下面的代码不起作用。请修改。

@{
    string displayMode = (Model.CompanyNameEnabled) ? "" : "disabled = disabled";
    @Html.TextBox("CompanyName", "", new { displayMode })
}
4个回答

39
@{
   object displayMode = (Model.CompanyNameEnabled) ? null : new {disabled = "disabled" };
   @Html.TextBox("CompanyName", "", displayMode)
}
你应该使用匿名对象作为htmlAttribute参数,属性名称应为html属性名称,属性值应为属性值。你的错误是传递了字符串而不是name=value对。

3
在MVC 5中,这种方法对我不起作用,输入呈现如下:<input class="form-control ui-autocomplete-input" displaymode="{ disabled = disabled }" id="txtPermitFromSearch" name="Permit.DescriptionFormatted" placeholder="Start typing a Permit # or an entity name." type="text" value="p-19, asdf asdf asdf , Brad Benson" autocomplete="off"> - Jarrette

8

<input id="textbox1" type="text" @{@((Model.CompanyNameEnabled) ? null : new { disabled = "disabled" })}; />

尚未测试,但应该有效。


没问题,可以运行 :) - Habeeb

4
一种简单的方法:

@Html.TextBoxFor(x => x.Phone, new { disabled = "disabled", @class = "form-control" })

使用@Html.TextBoxFor方法创建一个文本框,设置x.Phone作为显示内容,并且添加了disabled和class属性。

为了使这个答案更完整,可以加上@if(SetDisable) {}else{},在第一个set中放置禁用代码,在else中放置启用的文本框。 - ransems

1

正如在这个主题中已经提到的,建议的答案在MVC5中不再起作用。 实际上,有一个简单的两步解决方案。

  1. 将类分配给要禁用/启用的HTML输入(对于单个项目,id当然也可以)。 在下面的示例中,我为输入分配了一个类'switch-disabled'
@Html.TextBox("CompanyName", "", new { htmlAttributes = new { @class = "form-control switch-disable" } })

使用javascript(jquery)来启用/禁用HTML中的disabled参数。在下面的示例中,我在页面加载时执行此操作。
<script>
$(document).ready(() => {
    if(@Model.CompanyNameEnabled)
    {
        $('.switch-disable').attr("disabled", false);
    }else{
        $('.switch-disable').attr("disabled", true);
    }
});
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接