使用viewbag禁用html属性

时间:2015-09-28 11:37:35

标签: c# html razor asp.net-mvc-5

我试图在触发on change事件后将下拉列表呈现为diabled。我从httppost上的控制器传递一个viewbag中的禁用标志。但是,viewbag的名称显示在hh标志中,而不仅仅是值。请参阅下面的代码:

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

在我的控制器中

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>

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

3 个答案:

答案 0 :(得分:3)

您需要根据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;

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

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

答案 1 :(得分:1)

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

以下代码应该有效:

@Html.DropDownList("dropdown",yourlist,new { @class = "form-control",  id = "dropbox",disabled=ViewBag.propertydisable})

更新

$(document).ready(function () {


            $('#dropdown').change(function() {

                $('#form').submit();

            });

答案 2 :(得分:0)

对我来说似乎很苛刻,但你可以通过将属性改为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();"});
    }
}