如何在基本控制器中获取控制器名称和数据?

时间:2010-06-22 23:57:58

标签: c# asp.net-mvc controller

我有两个问题。

首先,背景:

我有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);
    }
}

我有Site& PageConfiguration存储在PageController中,因为实现PageController的每个页面都需要它们

问题1:
我正在尝试从现有的ASP.NET应用程序移植它。这需要页面名称来获取PageConfiguration对象。而不是页面名称,我将改为使用Controller的名称。对于我来说,将其作为字符串的最佳方式是什么?

问题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 Model具有我需要的Panel。但是在Panel类的构造函数中,PanelConfiguration为null。

有没有更好的&amp;更有效的方法来提供页面所需的数据?感谢。

1 个答案:

答案 0 :(得分:6)

问题1:

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

问题2:

当您使用类初始值设定程序语法(new { PanelConfiguration = ... })时,PanelConfiguration类的构造函数中的Search将为null,但这有关系吗?您不应该在那里使用PanelConfiguration属性。在Search部分中,它将被初始化。如果你需要在构造函数中使用它(我不明白你为什么需要它),你可以将它添加为构造函数参数。