1

我有一个 ASP.Net 4.0 Web 应用程序,其页面具有通用布局(顶部导航栏、左侧导航栏、徽标等...)。母版页非常适合布局部分,这就是我打算使用的。我不习惯使用 Masterpage,所以我的许多计划仍有待测试。但是,我还希望我的页面具有一些应该在呈现页面的 HTML 之前执行的通用功能。此功能包括检查用户是否有权访问该页面。此外,通用功能因页面而异。有些页面甚至不需要它。您会认为在 Masterpage 中包含此功能是显而易见的,并且功能取决于请求的内容页面。但是必须在内容页面 page_load 触发之前放置它,因为它的结果会影响页面的渲染。知道我们需要来自内容页面的信息来参数化功能,是否有最佳实践作为放置此功能的位置。理想情况下,这将在 Masterpage 的 OnInit() 中,因为它首先运行。但我不相信此时我可以从内容页面中检索到必要的信息。

非常感谢圣战

4

3 回答 3

0

您可以尝试编写自己的 HttpModule。

这个讨论应该有帮助

于 2012-11-15T12:51:51.153 回答
0

MasterPage 不是此功能的合适位置。最好的地方是自定义基 Page 类,您的特殊功能位于派生 Page 中。这样您就可以继承您的自定义类并逐页调用您需要的功能。

public class MyCustomPage : System.Web.UI.Page
{
    public bool IsAuthorized(string someCriteria)
    {
        // run special check
    }
}

然后,当您在站点中创建一个单独的页面时,您只需将其继承从System.Web.UI.Page您自己的类切换。

public class MyNewWebPage : MyNameSpace.MyCustomPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsAuthorized("myCriteria"))
            Response.Redirect("SomewhereElse.aspx");
    }
}
于 2012-11-15T12:51:57.467 回答
0

最好让所有页面都从一个公共基类继承,而不是使用 Masterpage(主要用于布局)作为您的业务逻辑。

但是,如果您仍然希望它MasterPageINeedsAuthentication.

在 MasterPage 中Init

protected void Page_Init(Object sender, EventArgs e)
{
    var page = HttpContext.Current.Handler as Page;
    if (page is INeedsAuthentication)
        checkAuthentication();
    else if (page is WebForm1)
        specialCondition();
    else
        commonCondition(); // for all pages, maybe do simply nothing here
}
于 2012-11-15T12:55:23.563 回答