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

Dav*_*Dev 4 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在PageConfiguration中存储了Site&PageConfiguration,因为实现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>
Run Code Online (Sandbox Code Playgroud)

我可以看到,当调用RenderPartial()方法时,PageConfiguration Model具有我需要的Panel.但是在Panel类的构造函数中,PanelConfiguration为null.

是否有更好更有效的方法来提供页面所需的数据?谢谢.

Dar*_*rov 6

问题1:

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

问题2:

当您使用类初始化程序语法(new { PanelConfiguration = ... })时PanelConfiguration,在Search类的构造函数中将为null,但它是否重要?你不应该在PanelConfiguration那里使用该物业.在Search部分中它将被初始化.如果你需要在构造函数中使用它(我不明白你为什么需要它),你可以将它添加为构造函数参数.