2013-08-02 27 views
5

ASP.NET MVC parametreleri sorgu dizesi için alternatif isimler belirlemek mümkün nasılsa mı?Alternatif isimler

oldukça güzel http://mysite.com/mypage/?color=yellow eser çağrılması
public ActionResult Index(color = "") 
{ 
    ... 
} 

, color parametre otomatik değerini sorgu dizesi gelen "sarı" alır:

Ben bu basit kontrolör Endeksi eylem var.

Ama şimdi “oldukça” lokalize parametrelerle aynı sayfanın yerelleştirilmiş varyantını istiyorum, ama hala aynı kontrolör yöntemi ile çalışan. Örnek: http://mysite.com/mypage/?farve=gul. İşte varsayılan Index() tirme yöntemine color Parametre olarak geçirilecek “gul” istiyoruz.

nasıl parametreleri sorgu dizesi için alternatif isimler için eşleştirmeler ayarlarım?

+0

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

cevap

6

Querystring parametreleri için alternatif adlar için eşlemeleri nasıl belirlerim?

Bir özel modeli cilt yazabiliriz. Her ASP.NET MVC uygulamada Yani

bir görünüm modeli yazarak başlatın: bu model için

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

ve daha sonra bir modeli cilt:

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

kayıtlı şuradan alınacak Application_Start:

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

ve şimdi kontrolör eylem olarak görünümü modeli alabilir parametresi:

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

mülknüzde bazı özel özellik kullanılarak modeli cilt daha esnek yapabilir Tabii:

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

ve model bağlayıcı bu değerleri okumak ve sorgudan bunları okumayı deneyin boş olmayan bir tane buluncaya kadar dize.

+0

Teşekkürler, ben bir özel modeli cilt uygulanan - Mükemmel çalışıyor. :) –

0

Yerelleştirilmiş/güzel bir adla, ikinci bir denetleyici, işlemlerin ve parametrelerin adlarını yerelleştirdiği ve varsayılan/ingilizce denetleyiciden eylemleri çağırdığı bir konuma ne dersin? Bu yöntemle, yerel URL'lerin tüm bölümleri vardır.

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

Controller meineseite 
{ 
    ActionResult Index(string farbe) 
    { 
     return mypage.Index(farbe); 
    } 
}