2011-06-22 30 views
5

Bir kullanıcı siteme geldiğinde, sorgu dizesinde template=foo geçirilmiş olabilir. Bu değer doğrulanmakta ve Session'da saklanmaktadır.MVC 3'te birden çok konuma .cshtml mi arıyorsunuz?

Dosyam düzeni şöyle görünür: Temelde

- Views/ 
    - Templates/ 
    - test1/ 
     - Home 
     - Index.cshtml 
    - test2/ 
     - Home 
     - List.cshtml 
    - Home/ 
    - Index.cshtml 

bir kullanıcı template=test1 ile Index, ben Views/Templates/test1/Index.cshtml kullanmak istiyorum isterse. template=test2 varsa, Views/Home/Index.cshtml kullanmak istiyorum (çünkü /Views/Templates/test2/Home/Index.cshtml mevcut değil). Ve eğer bir şablon geçmezse, o zaman doğrudan Views/Home'a gitmelidir.

Genel olarak MVC ve .NET'e yeni yaşıyorum, bu yüzden bakmaya nereden başlayacağımı bilmiyorum. Görünüm motoru için MVC3 ve Razor kullanıyorum.

+0

Emin değilim, ama ettirerek görünümü döndürmek için deneyin 'return View (string.Concat (Request.QueryString [ "template"], "/ Index")) –

+0

Daha şık bir yaklaşım, Controller sınıfından türetilmek ve mümkünse "Görünüm" yöntemini geçersiz kılmaktır. –

cevap

1

Bunu, özel bir RazorViewEngine öğesi oluşturarak ve ViewLocationFormats özelliğini ayarlayarak yapabilirsiniz. WebFormViewEngine ağır basan, ama sadece de çalışması gerekir RazorViewEngine kullanarak yapar There's a sample here: eğer çalışırsa

public class CustomViewEngine : WebFormViewEngine 
{ 
    public CustomViewEngine() 
    { 
     var viewLocations = new[] { 
      "~/Views/{1}/{0}.aspx", 
      "~/Views/{1}/{0}.ascx", 
      "~/Views/Shared/{0}.aspx", 
      "~/Views/Shared/{0}.ascx", 
      "~/AnotherPath/Views/{0}.ascx" 
      // etc 
     }; 

     this.PartialViewLocationFormats = viewLocations; 
     this.ViewLocationFormats = viewLocations; 
    } 
} 
1

Gereksinimlerinize uyacak şekilde Scott Hanselman's Mobile Device demo'u değiştirebilirsiniz. Kullanıcı aracısını kontrol etmek yerine veya bir mobil cihazsa, sorgu dizginizi veya Oturum değişkenlerinizi kontrol etmek için mantığınızı kullanabilirsiniz.

+0

Bu, Razor görüntü motorunu kullanmak için geçerli midir? –

+0

Evet. İstediğiniz görünüm motorunu kullanabilirsiniz. Orada hem Razor hem de Webformları kullandığı bir örnek var. – Chris

İlgili konular