2011-03-05 12 views
10

Düzen görünümümüze, alt görünümünün ne olduğuna bakılmaksızın aktarılan dinamik verilere ihtiyacımız var. Örneğin, düzenin başlığında bazı kullanıcılara özgü veriler gösteriyoruz.ASP.NET MVC 3 düzeni ViewBag verileri tüm çocuk görünümlerinde

Her bir eylemi bağımsız olarak sağlamak zorunda kalmadan bu verileri düzen görünümüne nasıl aktarabiliriz? Özel bir kontrolör kullanmalı mıyız yoksa daha iyi bir çözüm var mı?

+0

ile güncelleme sonra bölümleri tanımlayabilir ve burada uzun zaman önce benzersiz bir yaklaşım göstermiyor yazdığı bir blog var: http://crazorsharp.blogspot.com /2011/03/master-page-model-in-aspnet-mvc-3-using.html – BFree

cevap

9

benim bakış modellerinin tüm türetildiği bir taban görünümü modeli sahip olmaktır kullanmak stratejisi. Genel bir filtre de kullanabilmenize ve OnActionExecuted'i geçersiz kılabilseniz de bir temel denetleyici kullanıyorum. Bir ViewResult döndüren bir eylem tespit ettiğimde, modeli temel görünüm modelime döktüm ve modeldeki ortak özellikleri temel denetleyiciden ayarladım.

Genel filtre ve temel denetleyici arasındaki seçim çeşitli faktörlere bağlıdır. Gerçekten tüm eylemler için geçerliyse (görünüm sonuçları döndürürse) ve bazı kaynaklara erişmek için enjeksiyona ihtiyacınız yoksa, muhtemelen filtre ile giderim. Bağımlılıkların enjekte edilmesi gerekiyorsa veya verilere uygulanacak bazı denetleyicileriniz varsa ve bunun olmadığı yerlerde (Yönetici denetleyici), temel denetleyici yoluna gidecektim. Eğer onunla giderseniz, kontrolörden türetilmeyi hatırlamanız gerekecektir.

Ortak bir görünüm modelinden türetmek istemiyorsanız, aynı şeyi ViewBag ile de yapabilirsiniz. Güçlü yazılan modele sahip olmayı seviyorum, ancak YMMV.

+0

Lütfen bunu yapan herhangi bir bağlantıyı sağlayabilir misiniz? Ben bunun için çok yeniyim ve cevabınızı anlıyorsunuz ama bunu nasıl uygulayacağınıza dair bir ipucu olmadan. –

2

Bir Razor projesinde standart olan giriş kontrollerine bir göz atın - bu kısmi görünümler kullanıcı verilerine erişebilir - muhtemelen tam istediğiniz gibi.

örn. Tipik bir LogonPartial.cshtml içerebilir:

@if(Request.IsAuthenticated) { 
    <text>Welcome <b>@Context.User.Identity.Name</b>! 
    [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text> 
} 
else { 
    @:[ @Html.ActionLink("Log On", "LogOn", "Account") ] 
} 
+1

Varsayılan olarak İçerik'ten erişilemeyen kullanıcı olmayan verilere erişmemiz durumunda ne yapmalı? –