2013-08-02 19 views
5

Czy jest jakiś sposób możliwe ustawienie alternatywne nazwy dla kwerendy parametry w ASP.NET MVC?Alternatywne nazwy dla parametrów kwerendy

mam tę prostą akcję index kontrolera:

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

Wywołanie http://mysite.com/mypage/?color=yellow działa całkiem przyjemnie, parametr color automatycznie podnosi swoją wartość „Yellow” z kwerendy.

Ale teraz chciałbym mieć zlokalizowaną wariant tej samej strony, z „czystych” parametrów zlokalizowanych, ale nadal działa w taki sam sposób kontrolera. Przykład: http://mysite.com/mypage/?farve=gul. Tutaj chciałbym, aby parametr "gul" był przekazywany jako parametr color do domyślnej metody Index().

Jak ustawić mapowanie dla alternatywnych nazw dla kwerendy parametry?

+0

Możliwa Dupe: http://stackoverflow.com/questions/2146227/how-to-route-a-multiple-language-url-with-a-mvc – Abhitalks

Odpowiedz

6

Jak ustawić odwzorowania alternatywnych nazw dla parametrów wierszy?

Możesz napisać niestandardowy segregator.

Tak jak w każdej aplikacji ASP.NET MVC zacząć pisząc model wyświetlania:

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

a następnie model wiążący dla tego modelu

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, 
     }; 
    } 
} 

który zostanie zarejestrowany na swoje Application_Start:

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

, a teraz działanie kontrolera może przyjąć model widoku jako Parametr:

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

Oczywiście można zrobić spoiwo modelu bardziej elastyczny za pomocą jakiegoś atrybutu niestandardowego na miejscu:

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

i spoiwa modelu odczytać te wartości i spróbuj czytać je z kwerendy ciąg, aż znajdziesz taki, który nie jest pusty.

+0

Dzięki, I wdrożone spinacza modelu niestandardowych - działa świetnie. :) –

0

Jak o drugiego kontrolera z zlokalizowanego/ładnej nazwie, gdzie działania i parametry zlokalizowanej nazwy i wywołać działania z domyślnym/Angielski kontrolera? Dzięki tej metodzie masz wszystkie części adresu URL zlokalizowane.

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

Controller meineseite 
{ 
    ActionResult Index(string farbe) 
    { 
     return mypage.Index(farbe); 
    } 
} 
Powiązane problemy