如何获取控制器名称以及在基础控制器中可用的数据?

4

我有两个问题。

首先,背景信息:

我有一个PageController : 控制器(Controller) 和一个 SearchController : 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对象。我将使用控制器名称代替页面名称。最好的方法是什么,可以将其作为字符串获取?
问题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模型有我需要的面板。但在Search类的构造函数中,PanelConfiguration为null。
有没有更好、更有效的方法使我需要的页面数据可用?谢谢。

你能展示一下如何设置面板吗? - Mathias F
当创建PageConfiguration对象时,Panel被设置。 - DaveDev
1个回答

6

问题1:

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

问题2:

由于您使用了类初始化器语法(new { PanelConfiguration = ... }),因此在Search类的构造函数中,PanelConfiguration将为null,但这重要吗?您不应该在那里使用PanelConfiguration属性。在Search部分类中,它将被初始化。如果您需要在构造函数中使用它(我不知道为什么您需要它),您可以将其添加为构造函数参数。


谢谢Darin。我需要一个Search对象的实例是因为在PartialView中,PanelConfiguration本身有点无意义。我需要使用PanelConfiguration中的信息来获取Search需要用来填充Partial的数据。你能告诉我有更好的方法吗? - DaveDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接