2013-11-15 94 views
0

是否可以从局部视图访问基础控制器的属性?MVC4:局部视图中的访问控制器属性

我有以下设置:

public class BaseController : Controller 
{ 
    private string ServerName 
    { 
     get 
     { 
      return Request.ServerVariables["SERVER_NAME"]; 
     } 
    } 
    private Entities.Client _Client { get; set; } 
    public Entities.Client Client 
    { 
     get 
     { 
      return this._Client ?? (this._Client = this.HttpContext.Application["Client"] as Entities.Client); 
     } 
    } 
    private Settings _Settings { get; set; } 
    public Settings Settings 
    { 
     get 
     { 

      if (this._Settings == null) 
      { 
       this._Settings = new Settings(this.Client, this.Client.WebPageTemplateCapabilities != null ? SettingsType.XML : SettingsType.SQL); 
      } 

      return this._Settings; 
     } 
    } 
} 

我所有的控制器继承BaseController,并在其中的一些控制器的孩子行动的意见我呈现局部视图。有没有办法从其中一个部分视图访问BaseController.Settings?

回答

2

视图所需的任何信息应当从控制器传递到视图,然后从视图进一步传递到部分,例如,

public ActionResult Index() 
{ 
    return View(this.Settings); 
} 

在你看来

@model Settings 

@Html.RenderPartial("SomePartial", Model) 

在您的局部

@model Settings 

// use settings 

我所有的控制器继承BaseController,并在其中的一些控制器我渲染的孩子行动的意见部分视图

在这种情况下,您只需要从控制器中传入模型,例如

public ActionResult SomeAction() 
{ 
    return PartialView("SomePartialView", this.Settings); 
} 
+1

我控制器返回基于已经等车型的看法,注射对象设置成这种模式似乎并不像一个切实可行的办法来做到这一点,因为只有需要访问Settings对象的视图才是这个问题的局部视图。我的回答有什么缺点吗? – Maritim

+0

@Maritim唯一的缺点我会说,你现在有你的看法加上你的控制器,这不是很好。但是,没有技术上的原因,为什么它不起作用。我的建议是只更新你的局部视图模型以引用设置,并将它们分开。 – James

0

我落得这样做:

@{ 
    var settings = (ViewContext.Controller as BaseController).Settings; 
} 
相关问题