我有一个MVC3应用程序。我想根据条件禁用 dropdown list
中的特定项目。
@Html.DropDownList("ReportName", Model.ReportTypes, new { style = "color:black; float:left; padding:5px;", @id = "ReportType" })
@if (Model.numCount > 500)
{
// disable the item whose value = "RC-Report";
}
答案 0 :(得分:6)
填充SelectListItemExtends列表,并传递给ViewBag:
ViewBag.List = new Biz().ListSmall()
.Select(s => new SelectListItemExtends()
{
Text = s.dsc,
Value = s.id,
Enabled = s.is_active
}).ToArray();
在您的视图中使用:
@Html.DropDownList("id", ViewBag.List as IEnumerable<SelectListItemExtends>, new { })
创建文件HtmlHelperExtensions.cs:
using System.Collections.Generic;
using System.Web.Routing;
namespace System.Web.Mvc.Html
{
public static class HtmlHelperExtensions
{
public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItemExtends> selectList, object htmlAttributes)//, Func<object, bool> ItemDisabled)
{
//Creating a select element using TagBuilder class which will create a dropdown.
TagBuilder dropdown = new TagBuilder("select");
//Setting the name and id attribute with name parameter passed to this method.
dropdown.Attributes.Add("name", name);
dropdown.Attributes.Add("id", name);
var options = "";
TagBuilder option;
//Iterated over the IEnumerable list.
foreach (var item in selectList)
{
option = new TagBuilder("option");
option.MergeAttribute("value", item.Value.ToString());
if (item.Enabled == false)
option.MergeAttribute("disabled", "disabled");
if (item.PropExtends != null)
option.MergeAttributes(item.PropExtends);
option.SetInnerText(item.Text);
options += option.ToString(TagRenderMode.Normal) + "\n";
}
//assigned all the options to the dropdown using innerHTML property.
dropdown.InnerHtml = options.ToString();
//Assigning the attributes passed as a htmlAttributes object.
dropdown.MergeAttributes(new RouteValueDictionary(htmlAttributes));
//Returning the entire select or dropdown control in HTMLString format.
return MvcHtmlString.Create(dropdown.ToString(TagRenderMode.Normal));
}
}
public class SelectListItemExtends : SelectListItem
{
public bool Enabled { get; set; }
public IDictionary<string, string> PropExtends { get; set; }
}
}
结果是:
<select name="id" id="id">
<option value="430">Object 1</option>
<option value="5c7" disabled="disabled">Object 2</option>
</select>
ATT
Julio Spader
答案 1 :(得分:4)
使用jQuery
<select id="theSelect">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="500">500</option>
</select>
<script type="text/javascript">
$(function () {
$('#theSelect option[value=500]').each(function (i, item) {
item.disabled = true;
});
});
</script>
<强>更新强>
多个值
<script type="text/javascript">
$(function () {
$('#theSelect option').each(function (i, item) {
var itemValue = $(item).va();
if(itemValue == '500' || itemValue == '500_1' || itemValue == '500-1')
item.disabled = true;
});
});
</script>
答案 2 :(得分:1)
如果你想在剃刀本身中这样做,在条件期间只需构建属性并在DropDownList构造函数中指定它。
@{
IDictionary<string, object> attributes =
new RouteValueDictionary(
new {
style = "color:black; float:left; padding:5px;",
@id = "ReportType"
});
if (Model.numCount > 500)
{
// disable the item whose value = "RC-Report";
attributes.Add("disabled", "disabled");
}
}
@Html.DropDownList("ReportName", Model.ReportTypes, attributes);
答案 3 :(得分:0)
回到经典:
<select style="color:black; float:left; padding:5px;" id="ReportType">
<%foreach(var type in Model.ReportTypes) {%>
<option value="<%=type.Property%>"
<%if(Model.numCount > 500) {%>
<%if(Model.Name=="RC-Report") {%>
disabled="disabled"
<%}%>
<%}%>
> <%=type.Name%>
</option>
<%}%>
</select>