使用viewbag禁用html属性

本文关键字:属性 html 禁用 viewbag 使用 | 更新日期: 2023-09-27 18:14:54

我试图呈现一个下拉列表禁用一旦更改事件已被触发。我在httppost上从控制器的viewbag中传递禁用标志。但是,viewbag的名称显示在html标志中,而不仅仅是值。请看下面我的代码:

@Html.DropDownList("dropdown", ViewData["dropdown"] as IEnumerable<SelectListItem>, "--Select--", new { @class = "form-control",  id = "dropbox", onchange = "this.form.submit();", ViewBag.propertydisable})

in my controller

ViewBag.propertydisable = "disabled";

如何呈现html:

<select class="form-control" id="dropbox" name="searchparams" propertydisable="disabled" onchange="this.form.submit();" >
    <option value="">--Select Budget holder--</option>
    <option selected="selected" value="option1">option1</option>
    <option value="opt">option2</option>
</select>

我希望它如何渲染是

<select class="form-control" id="dropbox" name="searchparams" disabled onchange="this.form.submit();">
    <option value="">--Select Budget holder--</option>
    <option selected="selected" value="option1">option1</option>
    <option value="opt">option2</option>
</select>

因此,一旦回发完成,最终结果将被禁用。

使用viewbag禁用html属性

您需要基于ViewBag属性构建一个定义html属性的对象

@{ var attributes = ViewBag.propertydisable ? (object)new { @class = "form-control", disabled = "disabled"} : (object)new { @class = "form-control"}; }
@Html.DropDownList("dropdown", ViewData["dropdown"] as IEnumerable<SelectListItem>, "--Select--", attributes)
注意,您应该将ViewBag属性设置为
ViewBag.propertydisable = true;

旁注:使用不显眼的Javascript,而不是用行为污染你的标记。不确定为什么要将id属性从默认的"dropdown"更改为"dropbox",但以下假设您删除了id="dropbox"属性

$('#dropdown').change(function() {
  $('#form').submit();
});

首先,不要使用内联脚本,而是使用不显眼的js。而且你使用了错误的重载。

下面的代码应该可以工作:
@Html.DropDownList("dropdown",yourlist,new { @class = "form-control",  id = "dropbox",disabled=ViewBag.propertydisable})
更新:

$(document).ready(function () {
            $('#dropdown').change(function() {
                $('#form').submit();
            });

对我来说似乎很粗糙,但您可以通过将propertydisable更改为bool来有条件地呈现元素:

@{
    if(Viewbag.propertydisable)
    {
        Html.DropDownList("dropdown", 
            ViewData["dropdown"] as IEnumerable<SelectListItem>, 
            "--Select--", 
            new { @class = "form-control",  
                    id = "dropbox", 
                    onchange = "this.form.submit();", 
                    disabled = "disabled"});
        }
    else
    {
        Html.DropDownList("dropdown", 
            ViewData["dropdown"] as IEnumerable<SelectListItem>, 
            "--Select--", 
            new { @class = "form-control",  
                    id = "dropbox", 
                    onchange = "this.form.submit();"});
    }
}