2009-12-29 9 views
10

किसी कारण से मैं इस पर फंस गया हूं। मुझे एक ही दृश्य में DropDownList के आधार पर एक दृश्य से परिणामों को फ़िल्टर करने की आवश्यकता है। मूल विचार यह है: मेरे पास प्रदाताओं की एक सूची है जो विभिन्न भागीदारों से संबंधित है, लेकिन प्रदाता सूची में सभी प्रदाताओं को एक साथ (सभी भागीदारों के लिए) शामिल है। मुझे प्रदाता द्वारा साझेदार को प्रदर्शित करने में सक्षम होना चाहिए जब कोई उस भागीदार को देखना चाहता है (अन्यथा, डिफ़ॉल्ट लिस्टिंग सभी प्रदाता होंगे)। मेरा विचार वर्तमान में "डिफ़ॉल्ट" है (सभी दिखा रहा है), लेकिन कुछ कारणों से मैं इन परिणामों को फ़िल्टर करने का तरीका जानने के लिए यहां मॉनीटर (पिछले 2 घंटों के लिए!) पर घूर रहा हूं।एएसपी.नेट एमवीसी फ़िल्टरिंग परिणाम सूची/ग्रिड

कोई सुझाव जहां इसे शुरू/कैसे करना है ?!

उत्तर

10

संपादित करें: आप jQuery और AJAX (जो एक बेहतर उपयोगकर्ता अनुभव प्रदान करेगा क्योंकि केवल उप विभाजनों सूची ताज़ा होगी) के साथ ऐसा करना चाहते हैं, this tutorial देखते हैं।

अगर मैं सही ढंग से समझ, आप मूल रूप से एक WebForms शैली पोस्टबैक करना चाहते हैं।

मान लीजिए कि आप देशों और देश के उप-विभाजन (जैसे राज्य, प्रांत, आदि) के साथ एक नियंत्रण करते हैं। जब देश बदलता है, तो आप उचित उपविभाग प्रदर्शित करना चाहते हैं।

<% using (Html.BeginForm()) { %> 
    <%=Html.DropDownList("Address.CountryId", new SelectList(Country.GetAll(), "Id", "Name"), new { onchange = "this.form.submit();" })%> 
    <%=Html.DropDownList("Address.CountrySubdivisionId", new SelectList(CountrySubDivision.GetByCountryId(Model.CountryId), "Id", "Name"))%> 
    <input type="submit" name="btnSubmit" value="Submit"/> 
<%} %> 

यह फिल्टर करने के लिए निर्भर सूची प्राप्त करने के लिए महत्वपूर्ण है:

तो इस दृश्य होगा

new { onchange = "this.form.submit();" } 

और नियंत्रक में, आप कुछ इस तरह होगा:

[AcceptVerbs(HttpVerbs.Post)] 
    public ViewResult Index(string btnSubmit) 
    { 
     if (btnSubmit == null) 
     { 
      // return the view displayed upon GET 
     } 
     else 
     { 
      // process the submitted data 
     } 
    } 

उपरोक्त कोड में, यदि फॉर्म सबमिशन को ड्रॉपडाउन में मान बदलकर ट्रिगर किया गया था, btnSubm यह शून्य हो जाएगा। इस प्रकार, जिस क्रिया को आप पोस्ट कर रहे हैं, यह बता सकता है कि क्या उपयोगकर्ता अपने परिवर्तनों को अंतिम रूप देने के लिए था या नहीं।

+0

बहुत बढ़िया जवाब। धन्यवाद! – SlackerCoder

+0

आपका स्वागत है। यह मेरे लिए भी महत्वपूर्ण था क्योंकि मैं अपने सहकर्मियों को दिखाने की कोशिश कर रहा था कि एमवीसी हमें वह सब कुछ कर सकता है जिसकी हमें आवश्यकता है। –

+2

लगता है कि ट्यूटोरियल लिंक टूटा हुआ है ... – SteveC

3

वहाँ कई इस बिल्ली त्वचा के तरीके हैं। यहां एक है।

विधि के साथ एक के रूप में अपने DropDownList संलग्न करें = प्राप्त करें।

<form action="" method="get"> 
    <select name="provider"> 
    <option>1</option> 
    <!-- etc --> 
    </select> 
</form> 

उसके बाद, आप नियंत्रक में, प्रदाता है कि में पारित किया गया था के मूल्य के आधार फिल्टर। एक Nullable पैरामीटर के रूप में यह इलाज के लिए इतना है कि आप व्यवहार के कुछ प्रकार जब यह खाली होने पर हो सकता है याद रखें।

अपने कुछ मौजूदा कोड पोस्ट किए बिना, इससे कहीं अधिक विशिष्ट होना मुश्किल है।

+1

एक सरल कोड उदाहरण के लिए +1। –

1

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

फ़िल्टरिंग के लिए आप LINQ का उपयोग करने का प्रयास करना चाहेंगे।

0

आप शायद एक पैरामीटर अपने नियंत्रक कार्रवाई करने के लिए, शायद एक (नल?) प्रदाता की आईडी, परिणामों को फ़िल्टर करने को पहले से ही, जब आप उन्हें डीबी से प्राप्त करना चाहते हैं। फिर बस उन्हें सूचीबद्ध करने के लिए एक ही दृश्य का उपयोग करें, और ड्रॉपडाउन सूची में बदलाव होने पर एक नई सूची का अनुरोध करें।

6

पहले जवाब पर जोड़ने के लिए।

एक ड्रॉप डाउन बनाने के लिए (एएसपी नेट MVC में 3) मैंने किया था निम्नलिखित: Index.cshtml को

जोड़ें कोड

@using (Html.BeginForm()) 
{  
@Html.DropDownList("EmployeeId", (SelectList)ViewData["EmployeeId"])  
<input type="submit" name="btnSubmit" value="Submit"/> 
} 

के लिए डिफ़ॉल्ट ActionResult में YourModelNameController.cs में कोड जोड़ें सूचकांक()

public ActionResult Index() 
{ 

    //create a selectlist 
     var employeeList = from el in db.Employee select el; 
     ViewData["EmployeeId"] = new SelectList(employeeList, "EmployeeId", "TmName"); 

     return View(modelName); 
    } 
+1

+1 मैं एक रेजर विशिष्ट उत्तर की तलाश में था! धन्यवाद! –

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