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

发布于 2024-09-06 08:03:59 字数 1481 浏览 3 评论 0原文

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

我有 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。

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

I have 2 questions.

First, background:

I have a PageController : Controller and SearchController : PageController

PageController is defined as:

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

I have Site & PageConfiguration stored in PageController because every page that implements PageController needs them

Question 1:
I'm trying to port this from an existing ASP.NET app. that requires a page name to get the PageConfiguration object. Instead of a page name, I'm going to use the Controller's name instead. What's the best way for me to get that as a string?

Question 2:
I'm trying to render a PartialView which relies on that data, as follows:

<%@ 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>

I can see that when the RenderPartial() method is called the PageConfiguration Model has has the Panel I need. But in the constructor for the Search class that PanelConfiguration is null.

Is there a better & more effective way to make the data I need for the page available? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痴梦一场 2024-09-13 08:03:59

问题 1:

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

问题 2:

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

Question 1:

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

Question 2:

As you are using class initializer syntax (new { PanelConfiguration = ... }) the PanelConfiguration will be null in the constructor of the Search class but does it matter? You shouldn't be using the PanelConfiguration property there. In the Search partial it will be initialized. If you need to use it in the constructor (I don't see why you would need it) you could add it as constructor argument.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文