2010-06-22 95 views
4

我有2個問題。如何獲取控制器名稱和基礎控制器中的數據?

一,背景:

我有一個PageController : ControllerSearchController : PageController

的PageController被定義爲:

public class PageController : Controller 
{ 
    protected ISite Site; 
    protected PageConfiguration PageConfiguration; 

    protected override void Initialize(RequestContext rc) 
    { 
     this.Site = new Site(SessionUser.Instance().SiteId); 

     this.PageConfiguration = this.Site.CurrentSite.GetPage(/* controller name */); 

     base.Initialize(rc); 
    } 
} 

我有網站& PageConfiguration存儲的PageController因爲每一個實現的PageController需求頁他們

問題1:
我想從現有的ASP.NET應用程序移植此。這需要一個頁面名稱才能獲得PageConfiguration對象。而不是頁面名稱,我將使用控制器的名稱。什麼是最好的方式讓我把它當作一個字符串?

問題2:
我試圖渲染的依賴於數據的PartialView,如下所示:

<%@ Page Title="" 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<PageConfiguration>" %> 
<%@ Import Namespace="tstFactsheetGenerator.Models.Panels"%> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <% Html.RenderPartial("Search", new Search { PanelConfiguration = Model.Panels[0] }); %> 
</asp:Content> 

我可以看到,當的RenderPartial()方法被稱爲PageConfiguration型號有我需要的小組。但是在PanelConfiguration爲null的Search類的構造函數中。

還有什麼能讓我需要提供的頁面數據更好&更有效的方法是什麼?謝謝。

+0

你能展示你如何設置Panel? – 2010-06-23 06:34:44

+0

面板在創建PageConfiguration對象時設置。 – DaveDev 2010-06-23 08:19:52

回答

6

問題1:

protected override void Initialize(RequestContext rc) 
{ 
    ... 
    var controllerName = requestContext.RouteData.Values["controller"] 
    ... 
} 

問題2:

當您使用類初始化語法(new { PanelConfiguration = ... })的PanelConfiguration將在Search類的構造函數空,但有什麼關係?你不應該在那裏使用PanelConfiguration屬性。在Search部分它將被初始化。如果你需要在構造函數中使用它(我不明白爲什麼你需要它),你可以將它作爲構造函數參數添加。

+0

謝謝Darin。我需要一個Search對象實例的原因是因爲在PartialView中PanelConfiguration本身是沒有意義的。我需要使用PanelConfiguration中的信息來獲取數據搜索需要填充Partial。你能告訴我是否有更好的方法去解決這個問題? – DaveDev 2010-06-23 08:16:59