2012-10-06 35 views
27

प्रश्न: मैं इस तरह एक dropdownlist बनाने की जरूरत:DropDownListFor विशेषता विशेषता के साथ एक कस्टम विशेषता के साथ?

<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" }) 

और एकाधिक के बारे में क्या, जिसमें कोई विशेषता मान नहीं है?

अगर मैं एक शब्दकोश या new { @disabled = "disabled" } के बजाय एक NameValueColletion गुजरती हैं, तो यह NameValueColletion/शब्दकोश के गुणों ...

मैं विशेषता कुंजी में विशेष वर्ण के साथ विशेषताओं कैसे पारित कर सकते हैं आउटपुट? "-" जब गाया

+0

संभावित डुप्लिकेट [एस्पनेट एमवीसी के साथ हाइफेनेटेड एचटीएमएल विशेषताओं] (http://stackoverflow.com/questions/2897733/hyphenated-html-attributes-with-asp-net-mvc) –

उत्तर

59

एक अंडरस्कोर बजाय

@data_placeholder = "whatever" 

Mvc3 के बाद से "_" से, का उपयोग करें।

यह ठीक काम करता है क्योंकि HTML में विशेषता नामों में अंडरस्कोर स्वीकार्य नहीं हैं।

3

आह, यह आसान है।
गलती <string, string><string, object> का एक शब्दकोश के बजाय का एक शब्दकोश घोषित करने के लिए (और cOption में गुण के बजाय चर का उपयोग करने के लिए) ...


<string, string> के शब्दकोश के साथ यह वस्तु "paramlist" का उपयोग करता था अधिभार, IDictionary<string, object> के बजाय;)

@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); 
} 
+0

यह मजाकिया है, मैंने कभी नहीं किया है इसे इस तरह से लागू किया। ठंडा! – Jowen

संबंधित मुद्दे