2011-02-28 18 views
5

मैं एक मॉडल है और वह मॉडल एक public List<string> Hour { get; set; } और निर्माता हैमॉडल बंधन लटकती चयनित मान

public SendToList() 
    { 
     Hour = new List<string> { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" }; 
    } 

मेरा प्रश्न है कि मैं क्यों इस

@Html.DropDownListFor(model => model.Hour, Model.Hour.Select( 
       x => new SelectListItem 
       { 
        Text = x, 
        Value = x, 
        Selected = DateTime.Now.Hour == Convert.ToInt32(x) 
       } 
      )) 

के लिए एक चयनित मूल्य नहीं मिलता है लेकिन मुझे यहां एक चुना गया मूल्य मिलता है।

@Html.DropDownList("Model.Hour", Model.Hour.Select( 
       x => new SelectListItem 
       { 
        Text = x, 
        Value = x, 
        Selected = DateTime.Now.Hour == Convert.ToInt32(x) 
       } 
      )) 

क्या अंतर है?

उत्तर

11

क्योंकि आपको अपने मॉडल में चयनित मान असाइन करने की आवश्यकता है।

तो मैं आपको निम्न दृष्टिकोण की अनुशंसा करता हूं। के दृश्य मॉडल के साथ शुरू करते हैं:

public class MyViewModel 
{ 
    // this will hold the selected value 
    public string Hour { get; set; } 

    public IEnumerable<SelectListItem> Hours 
    { 
     get 
     { 
      return Enumerable 
       .Range(0, 23) 
       .Select(x => new SelectListItem { 
        Value = x.ToString("00"), 
        Text = x.ToString("00") 
       }); 
     } 
    } 
} 

आप नियंत्रक के अंदर इस दृश्य मॉडल पॉप्युलेट सकता है:

public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      // Set the Hour property to the desired value 
      // you would like to bind to 
      Hour = DateTime.Now.Hour.ToString("00") 
     }; 
     return View(model); 
    } 
} 

और बस अपने ध्यान में रखते हुए:

@Html.DropDownListFor(
    x => x.Hour, 
    new SelectList(Model.Hours, "Value", "Text") 
) 
+0

इस के लिए धन्यवाद। बनाता है चयनित मूल्य के लिए एक समर्थक है। रेंज स्टेटमेंट से प्यार करें, इसके बारे में नहीं पता था। क्या मैं मिनटों के लिए भी इसका उपयोग कर सकता हूं? मैं केवल 0,5,10 के लिए विकल्प देना चाहता हूं .... –

+1

मुझे पता है कि यह थोड़ी देर हो चुकी है लेकिन आपकी टिप्पणी में आपके प्रश्न का उत्तर देने के लिए, आप कहां से कथन में एक मॉड्यूल कर सकते हैं। जहां (x => x% 5 <= 0) – Sam

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