2008-11-05 12 views
7

मुझे अपने पृष्ठ पर एक ड्रॉपडाउन सूची चाहिए जो उपयोगकर्ता को अपना राज्य चुनने की अनुमति देगी। चूंकि यह शायद एक नियंत्रण है जिसका उपयोग कहीं और किया जाएगा, मैंने सोचा था कि एक एमवीसी व्यू उपयोगकर्ता नियंत्रण बनाने का अच्छा विचार होगा जिसे पुन: उपयोग किया जा सकता है।एएसपी.नेट एमवीसी उपयोगकर्ता नियंत्रण देखें - आईडी कैसे सेट करें?

मैं नियंत्रण कुछ इस तरह दिखेगा सोच रहा था:

<select name="" id=""> 
    <option value="AL">Alabama</option> 
    <option value="AK">Alaska</option> 
</select> 

और मेरे विचार में कोड की तरह कुछ होगा:

<%= Html.RenderPartial("StateDropdownControl") %> 

मेरा प्रश्न है, स्थापित करने के लिए सबसे अच्छा तरीका क्या है नियंत्रण पर नाम और आईडी? मैं यह सुनिश्चित करना चाहता हूं कि यदि आवश्यक हो तो मुझे एक पृष्ठ पर इस नियंत्रण के कई उदाहरण मिल सकते हैं। साथ ही, मैं उस राज्य में भेजने में सक्षम होना चाहता हूं जिसे डिफ़ॉल्ट रूप से चुना जाना चाहिए।

क्या मैं इसे किसी भी तरह व्यूडाटा के साथ करूँगा?

उत्तर

9

कोरी सही समाधान पर है। मुझे लगता है कि आपके विचार के लिए विशिष्ट मॉडल ऑब्जेक्ट्स को घोषित करना बहुत आसान बनाता है और एक साइड बोनस उन्हें परीक्षण करने में आसान बनाता है।

बजाय सिर्फ वस्तु के रूप में आईडी पास करने का, तो आप शायद में पारित करने के लिए अपने स्वयं के मॉडल वस्तु बनाने के लिए चाहते हैं

यह कुछ इस तरह दिखाई दे सकता है:। जाहिर है

public class StateDropDownPresentationModel 
{ 
    public string DropDownID { get; set; } 
    public string SelectedState { get; set; } 
} 

, अपना विचार सही बनाने के लिए आपको जो भी मॉडल चाहिए, उसे जोड़ना जारी रखें।

उसके बाद, आप इस तरह यह कह सकते हैं: फिर

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", new StateDropDownPresentationModel { DropDownID = "MyID", SelectedState = "IL" } %> 

बस सुनिश्चित करें कि आप आईडी जैसी चीजों के लिए जाँच करता है में डाल कर किया जा रहा है अशक्त/खाली (कि शायद एक त्रुटि फेंक चाहिए) और SelectedState अशक्त जा रहा है/खाली ।

3

वैसे आप वस्तु डेटा RenderPartial विधि के संयोजन के रूप में उपयोगकर्ता नियंत्रण रेंडर करने के लिए, पारित कर सकते हैं ताकि आप आसानी से निम्नलिखित कर सकता है: निम्नलिखित

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", "MyID") %> 

और UserControl में है :

<select name="<%=ViewData.Model%>" id="<%=ViewData.Model%>"> 

.... 

बस सुनिश्चित करने के लिए, एक बेहतर तरीका यह संभाल करने के लिए एक सरल डीटीओ (आंकड़ा अंतरण वस्तु) बनाने के लिए है कि सूचनाओं धारण करने के लिए है mation ताकि आप अपने उपयोगकर्ता नियंत्रण में अधिक जानकारी पास कर सकें, आपको अनिवार्य रूप से आवश्यकता होगी।

उदाहरण:


class ComboData 
{ 
    string ID {get;set;} 
    string CssClass {get;set;} 
    //Other stuff here 
} 

<% 
var comboData = new ComboData {ID = "myID", CssClass = "comboStyle" } 

%> 

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", comboData) %> 
<select name="<%=ViewData.Model.ID%>" id="<%=ViewData.Model.ID%>" class="<%=ViewData.Model.CssClass%>"> 

.... 

आप उपयोगकर्ता नियंत्रण इस उदाहरण के लिए प्रकार ComboData की एक सामान्य होने के लिए पीछे कोड सेट सुनिश्चित करें।

1

Html.DropDownList सहायक विधि पर एक नज़र डालें। इसमें कई ओवरलोड हैं जो आपको सूची डेटा पास करने और चयनित आइटम सेट करने की अनुमति देते हैं। सबसे सरल संस्करण सिर्फ चयन का नाम सेट करता है।

<%= Html.DropDownList("SelectStates"); %> 

अगर वहाँ ViewData [ "SelectStates"] प्रकार MultiSelectList की है कि फिर सूची स्वतः भर जाती है में एक मूल्य है।

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