C# 使用viewbag禁用html属性

C# 使用viewbag禁用html属性,c#,html,razor,asp.net-mvc-5,C#,Html,Razor,Asp.net Mvc 5,我试图在触发on change事件后将下拉列表呈现为diabled。我正在从httppost上的控制器传递viewbag中的disabled标志。但是,viewbag的名称显示在html标志中,而不仅仅是值。请参阅下面我的代码: @Html.DropDownList("dropdown", ViewData["dropdown"] as IEnumerable<SelectListItem>, "--Select--", new { @class = "form-control",

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

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

-选择预算负责人- 选择1 选择2 我希望它呈现的是什么

-选择预算负责人- 选择1 选择2
因此,一旦回发完成,最终结果将被禁用。

首先,不要使用内联脚本,而是使用不引人注目的js。而且你使用了错误的重载

以下代码应该可以工作:

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

$document.readyfunction{ $'dropdown'.changefunction{ $‘表格’。提交;
}首先,不要使用内联脚本,而要使用不引人注目的js。而且你使用了错误的重载

以下代码应该可以工作:

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

$document.readyfunction{ $'dropdown'.changefunction{ $‘表格’。提交;
}对我来说似乎有点老套,但您可以通过将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();"});
    }
}

对我来说似乎有点骇客,但您可以通过将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();"});
    }
}

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

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

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

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

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

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

我已经尝试过了,该属性在没有触发回发的情况下被禁用,即使我将viewbag值设置为false。@user2055227是的,只要存在disabled就会禁用它,而不管它后面的部分是什么=。因此js代码是错误的。请参阅更新的code@persianDeveloper这是一个不引人注目的好例子javascript,但当下拉列表仍处于禁用状态时,很难触发更改。@PersandeDeveloper我的观点是,问题与javascript无关。我已经尝试过了,即使我将viewbag值设置为false,属性在未触发回发的情况下也是禁用的。@user2055227是的,只是disabled的存在将禁用它,而不管它后面的部分是什么。因此js代码是错误的。请参阅更新的code@persianDeveloper这是一个不引人注目的javascript的好例子,但是当下拉列表仍然被禁用时,很难触发更改。@PersandDeveloper我的观点是,问题与此无关javascript。