2010-06-22 104 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

相关问题