2013-08-02 4 views
5

क्या एएसपी.नेट एमवीसी में क्वेरीस्ट्रिंग पैरामीटर के लिए वैकल्पिक नाम सेट करना संभव है?क्वेरीस्ट्रिंग पैरामीटर के लिए वैकल्पिक नाम

public ActionResult Index(color = "") 
{ 
    ... 
} 

काफी अच्छी तरह से काम करता है http://mysite.com/mypage/?color=yellow कॉलिंग, color पैरामीटर स्वचालित रूप से अपने मूल्य क्वेरी स्ट्रिंग से "पीले" ऊपर उठाता है:

मैं इस सरल नियंत्रक सूचकांक कार्रवाई की है।

लेकिन अब मैं एक ही पृष्ठ का एक स्थानीय संस्करण "सुंदर" स्थानीय मानकों के साथ, लेकिन अभी भी एक ही नियंत्रक विधि के साथ काम करना चाहता हूं। उदाहरण: http://mysite.com/mypage/?farve=gul। यहां मैं color पैरामीटर के रूप में "gul" को डिफ़ॉल्ट Index() एयनियन विधि में पारित करना चाहता हूं।

मैं क्वेरीस्ट्रिंग पैरामीटर के लिए वैकल्पिक नामों के लिए मैपिंग कैसे सेट करूं?

+0

संभावित शिकार: http://stackoverflow.com/questions/2146227/how-to-route-a-multiple-language-url-with-a-mvc – Abhitalks

उत्तर

6

क्वेरीस्ट्रिंग पैरामीटर के लिए वैकल्पिक नामों के लिए मैपिंग कैसे सेट करूं?

आप एक कस्टम मॉडल बाइंडर लिख सकते हैं।

हर ASP.NET MVC आवेदन में के रूप में

तो तुम एक दृश्य मॉडल लिखकर प्रारंभ करें:

public class MyViewModel 
{ 
    public string Color { get; set; } 
} 

और फिर एक मॉडल बांधने की मशीन इस मॉडल के लिए:

public class MyViewModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var query = controllerContext.HttpContext.Request.QueryString; 
     var value = query["color"] ?? query["gul"] ?? query["couleur"]; 
     return new MyViewModel 
     { 
      Color = value, 
     }; 
    } 
} 

जिस पर पंजीकृत किया जाएगा आपके Application_Start:

ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder()); 

है और अब अपने नियंत्रक कार्रवाई के रूप में देखने के लिए मॉडल लग सकता है पैरामीटर:

public ActionResult Index(MyViewModel model) 
{ 
    ... 
} 

बेशक आप संपत्ति पर कुछ कस्टम विशेषता का उपयोग करके मॉडल बांधने की मशीन और अधिक लचीला बना सकता है: उन मूल्यों को पढ़ने

public class MyViewModel 
{ 
    [PossibleQueries("color", "gul", "couleur")] 
    public string Color { get; set; } 
} 

और मॉडल बांधने की मशीन में और उन्हें क्वेरी से पढ़ने की कोशिश स्ट्रिंग जब तक आप एक ऐसा नहीं पाते जो शून्य नहीं है।

+0

धन्यवाद, मैं कस्टम मॉडल बांधने की मशीन लागू किया - अच्छी तरह से काम। :) –

0

स्थानीयकृत/सुंदर नाम के साथ दूसरे नियंत्रक के बारे में, जहां कार्रवाइयों और पैरामीटर के स्थानीय नाम हैं और डिफ़ॉल्ट/अंग्रेजी नियंत्रक से क्रियाएं कॉल करते हैं? इस विधि के साथ आपके पास यूआरएल के सभी हिस्सों को स्थानीयकृत किया गया है।

Controller mypage 
{ 
    ActionResult Index(string color) 
    { 
     // normal code 
    } 
} 

Controller meineseite 
{ 
    ActionResult Index(string farbe) 
    { 
     return mypage.Index(farbe); 
    } 
} 
संबंधित मुद्दे