【问题标题】:DropDownListFor with a custom attribute with - in attribute name?DropDownListFor 具有带有 - 在属性名称中的自定义属性?
【发布时间】:2012-10-06 11:33:16
【问题描述】:

问题:我需要像这样创建一个下拉列表:

<select id="ddCustomers" data-placeholder="Choose a customer" class="chzn-select" style="width:350px;" tabindex="1" multiple>

现在我可以像这样添加自定义属性:

@Html.DropDownListFor(m => m.Id, Model.Values, new { @disabled = "disabled" })

很遗憾,如果变量名中有“-”,则无法编译。

@Html.DropDownListFor(m => m.Id, Model.Values, new { @disabled = "disabled", @data-placeholder = "whatever" })

那么没有属性值的倍数呢?

如果我传递字典或 NameValueColletion 而不是 new { @disabled = "disabled" },那么它会输出 NameValueColletion/Dictionary 的属性...

如何在属性键中传递带有特殊字符的属性?

【问题讨论】:

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


【解决方案1】:

改用下划线

@data_placeholder = "whatever"

由于 Mvc3 的“_”在渲染时被替换为“-”。这也适用于 Mvc5。

这很好用,因为下划线在 html 中的属性名称中是不可接受的。

【讨论】:

    【解决方案2】:

    啊,这很容易。
    错误是声明了&lt;string, string&gt; 的字典 而不是 &lt;string, object&gt; 的字典(并且在 cOption 中使用变量而不是属性)...


    使用&lt;string, string&gt; 的字典,它使用对象“paramlist”重载,而不是IDictionary&lt;string, object&gt; ;)

    @Html.DropDownListFor(model => model.Title, new SelectList(Model.ls, "value", "text"), Model.nvc)
    
     <!--
     @Html.DropDownList("myIdAndName", new SelectList(Model.ls, "value", "text"), Model.nvc)
     -->
    
    
    
    
        public ActionResult Index()
        {
            cHomeModel HomeModel = new cHomeModel();
    
            HomeModel.nvc.Add("class", "chzn-select");
            HomeModel.nvc.Add("data-placeholder", "Choose a customer");
            HomeModel.nvc.Add("style", "width:350px;");
            HomeModel.nvc.Add("tabindex", "1");
            HomeModel.nvc.Add("multiple", "multiple");
            HomeModel.nvc.Add("id", "lol");
    
    
            cOption option = null;
    
    
            for (int i = 0; i < 10; ++i)
            {
                option = new cOption();
    
                option.value = i.ToString();
                option.text = "text" + i.ToString();
    
                HomeModel.ls.Add(option);
            }
    
    
            return View(HomeModel);
        }
    
    
    
    
    
        public class cOption
        {
            public string value
            {
                get;
                set;
            }
    
            public string text
            {
                get;
                set;
            }
    
        }
    
    
        public class cHomeModel
        {
            public string Title = "MyDropDownListName";
            public List<cOption> ls = new List<cOption>();
    
    
            public System.Collections.Generic.Dictionary<string, object> nvc = new System.Collections.Generic.Dictionary<string, object>();
    
        }
    

    或更多Linqiq:

    public ActionResult Index()
    {
        cHomeModel HomeModel = new cHomeModel();
    
        HomeModel.nvc.Add("class", "chzn-select");
        HomeModel.nvc.Add("data-placeholder", "Choose a customer");
        HomeModel.nvc.Add("style", "width:350px;");
        HomeModel.nvc.Add("tabindex", "1");
        HomeModel.nvc.Add("multiple", "multiple");
        HomeModel.nvc.Add("id", "lol");
    
    
        HomeModel.ls = System.Linq.Enumerable.Range(0, 9)
                .Select(x => new cOption() { text = x.ToString(), value = x.ToString() })
                .ToList();
    
    
        // or otherwise: 
        HomeModel.ls = (
                     from i in System.Linq.Enumerable.Range(0, 9)
                     select new cOption() { text = i.ToString(), value = i.ToString() }
        ).ToList();
    
    
        return View(HomeModel);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多