2012-03-01 13 views
10

वर्तमान में मैं एक HTML 'एडिटर का उपयोग कर रहा हूं क्योंकि इस तरह के डिफ़ॉल्ट' बनाएं 'व्यू पेज में नियंत्रण है।एचटीएमएल कनवर्ट करना। एडिटर के लिए ड्रॉप डाउन (html.dropdownfor?)

<%: Html.EditorFor(model => model.IsActive) %> 

मैं इसे मूल्यों के साथ एक ड्रॉप डाउन में परिवर्तित करना चाहता हूं और फिर भी दृश्य में मॉडल से जुड़ना चाहता हूं। मेरा सवाल दो गुना है।

  1. यदि ड्रॉप डाउन में केवल 2/3 मान आवश्यक हैं..क्या स्पष्ट रूप से 2 या 3 मानों को स्पष्ट करने का कोई त्वरित तरीका है?

  2. यदि सूची बड़ी है और एक एसक्यूएल क्वेरी से आने की जरूरत है, तो यह कैसे करें?

सहायता के लिए अग्रिम धन्यवाद।

उत्तर

30

ड्रॉपडाउन सूची उत्पन्न करने के लिए आपको अपने दृश्य मॉडल पर 2 गुणों की आवश्यकता है: चयनित मूल्य को बांधने के लिए एक स्केलर संपत्ति और संग्रह संपत्ति जिसमें ड्रॉपडाउन में दिखाने के लिए आइटम शामिल होंगे।

public class DropDownListViewModel 
{ 
    public string SelectedValue { get; set; } 
    public IEnumerable<SelectListItem> Items { get; set; } 
} 

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

तो तुम एक दृश्य के मॉडल को परिभाषित कर सकता है

public DropDownListViewModel Foo { get; set; } 

अब आप इसके लिए एक कस्टम संपादक टेम्पलेट हो सकता था प्रकार (~/Views/Shared/EditorTemplates/DropDownListViewModel.ascx):

<%@ Control 
    Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownListViewModel>" 
%> 
<%= Html.DropDownListFor(x => x.SelectedValue, Model.Items) %> 

और फिर अपने मुख्य दृश्य में:

<%= Html.EditorFor(x => x.Foo) %> 

अब सभी अब सिर्फ़ अपने नियंत्रक कार्रवाई इसी मूल्यों के साथ Foo संपत्ति को भरने के लिए मुख्य दृश्य प्रतिपादन है। हार्डकोड किया जा सकता है, एक भंडार या जो कुछ भी से आते हैं। यह वास्तव में कोई फर्क नहीं पड़ता।

<%= Html.DropDownList(
    "", 
    new SelectList(
     new[] 
     { 
      new { Value = "true", Text = "Yes" }, 
      new { Value = "false", Text = "No" }, 
     }, 
     "Value", 
     "Text", 
     Model 
    ) 
) %> 

और उसके बाद:

दूसरी ओर अगर आप पूर्व में मान आप संपादक टेम्पलेट में उन्हें हार्डकोड सकता है (~/Views/Shared/EditorTemplates/YesNoDropDown.ascx) जानता था

<%= Html.EditorFor(x => x.IsActive, "YesNoDropDown") %> 

या IsActive संपत्ति सजाने द्वारा आपके दृश्य मॉडल पर:

[UIHint("YesNoDropDown")] 
public bool IsActive { get; set; } 

और फिर:

<%= Html.EditorFor(x => x.IsActive) %> 
+0

समाधान के लिए धन्यवाद। मुझे संपादक टेम्पलेट में एक पहचानकर्ता अपेक्षित अपवाद प्राप्त हो रहा है .ascx पेज ... नए [] – ZVenue

+0

@ZVenue के पास, अभी भी इस समस्या के साथ समस्याएं हैं? –

+0

कोई और समस्या नहीं .. आपकी मदद के लिए धन्यवाद .. आपका संशोधित समाधान .. http://stackoverflow.com/questions/9568111/problems-converting-editorfor-to-dropdownlist – ZVenue

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