我有两个问题。
首先,背景:
我有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对象。而不是页面名称,我将改为使用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;更有效的方法来提供页面所需的数据?感谢。
答案 0 :(得分:6)
问题1:
protected override void Initialize(RequestContext rc)
{
...
var controllerName = requestContext.RouteData.Values["controller"]
...
}
问题2:
当您使用类初始值设定程序语法(new { PanelConfiguration = ... }
)时,PanelConfiguration
类的构造函数中的Search
将为null,但这有关系吗?您不应该在那里使用PanelConfiguration
属性。在Search
部分中,它将被初始化。如果你需要在构造函数中使用它(我不明白你为什么需要它),你可以将它添加为构造函数参数。