【问题标题】:Accessing variable from code behind Master Page从母版页后面的代码访问变量
【发布时间】:2012-08-12 23:47:34
【问题描述】:

请看下图

如您所见,我有一个母版页 Design.master 及其背后的代码称为 Design.master.cs

我只是想让我的页面在用户未登录时重定向到dashboard.aspx,但无论我尝试什么我都无法做到。

我希望能够访问在后面的代码中设置的公共变量redirect 的值,并从Design.master 代码中访问它。

这样我就可以检查变量并将Response.redirect() 代码放在Design.master 页面中。

除非您知道如何通过Design.master.cs 代码使重定向工作?

请帮忙:(这让我发疯了!

更新图片

Design.master代码:

<%@ Master Language="C#" CodeBehind="~/Design.master.cs" AutoEventWireup="true" %>

<%

        Response.Redirect("default.aspx", true);

%>

<!DOCTYPE html>

<html>

<head>
    <title>Portal</title>
    <link rel="stylesheet" href="styles.css" type="text/css" />

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script src="portal_script.js" type="text/javascript"></script>
</head>
<body>

<div id="main_wrapper">

        <div id="header_top_wrapper">
            <div id="header_top">
                <img src="images/design/logo_small.png" id="logo_top" />

                <a href="basket.aspx">
                    <div id="basket_top_link">
                        <div>Order Basket</div>
                    </div>
                </a>
            </div>
        </div>
        <div id="header_breadcrumb_wrapper">
            <div id="header_breadcrumb"></div>
        </div>

        <div id="content_wrapper">
            <div id="content">

                <div id="side_menu">

                    <div id="customer_info">

                        <asp:ContentPlaceHolder id="CustomerInfo" runat="server">

                        </asp:ContentPlaceHolder>

                    </div>

                    <a href="dashboard.aspx"><div class="side_menu_item">
                        <div class="item_title">View Orders</div>
                        <div class="item_description">View your outstanding orders</div>
                    </div></a>

                    <a href="search.aspx"><div class="side_menu_item">
                        <div class="item_title">Product Search</div>
                        <div class="item_description">Search products and view stock levels</div>
                    </div></a>

                    <a href="search.aspx"><div class="side_menu_item">
                        <div class="item_title">Outstanding Complaints</div>
                        <div class="item_description">View status of complaints</div>
                    </div></a>

                </div>

                <div id="content_left">

                    <asp:ContentPlaceHolder id="Content" runat="server">

                    </asp:ContentPlaceHolder>

                </div>

            </div>
        </div>

        <div id="footer_wrapper">

            <div id="footer"><p></p></div>

        </div>

</div>

</body>
</html>

Design.master.cs 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Design : System.Web.UI.MasterPage
{

    public bool redirect = false;

    protected override void OnInit(EventArgs e)
    {

        // Get the users session
        SessionManager session = new SessionManager(HttpContext.Current);

        // I've tried it here, and it won't redirect
        // Response.Redirect("default.aspx");

        redirect = true;

    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // I've tried it here, and it won't redirect
        // Response.Redirect("default.aspx");
    }
}

【问题讨论】:

  • 您确定您的代码能够判断用户何时登录吗?如果是这样,那么 Curt 的答案将起作用,如果没有,可能是您的问题在于确定用户是否登录。
  • 您正在尝试使用母版页中的代码从 dashboard.aspx 重定向到 default.aspx。问题:您的dashboard.aspx 是否使用母版页开头?请从dashboard.aspx 发布页面声明...而且(因为我回答了您的上一个问题)您是否尝试将逻辑放入 Global.asax?

标签: c# asp.net variables master-pages public


【解决方案1】:

只需在 Design.master.csPage_Load 方法中执行此操作即可:

protected void Page_Load(object sender, EventArgs e){
   if (result){
      Response.Redirect("....");
   }
}

这比标记文件中的代码中断要简洁得多,而且这种技术只会在将来给你带来麻烦。

【讨论】:

  • 感谢您的回复。我已经尝试过了,页面根本没有重定向。它继续加载我不希望用户访问的页面。真是莫名其妙……好像没有加载Response.Redirect()一样。
  • @Coulton 我假设result 只是返回false。您在哪里将其设置为true?我在您的屏幕截图中看不到此内容
  • 您尝试调试它吗?价值观是什么?这些函数甚至被调用了吗?
  • @Remy 我已经完全去掉了LoggedIn 逻辑,我只是​​想让重定向工作,它不会仅仅放在它自己的Design.master.cs 代码中。
  • @Coulton 你可以把它放在MasterPage中。这是页面生命周期事件的顺序列表,这应该可以帮助您weblogs.asp.net/ricardoperes/archive/2009/03/08/…
【解决方案2】:

AutoEventWireUp 默认设置为 false。查看您的声明,这就是母版页方法没有连接的原因。将声明更改为

&lt;%@ Master Language="C#" AutoEventWireup="true"

然后你可以添加类似的东西

protected override void OnInit(EventArgs e)
        {
            if(!loggedIn)
                 Response.Redirect("login.aspx", false);
          //...
        }

【讨论】:

  • 我 Brian 请查看i.stack.imgur.com/LaN3G.png 以查看我尝试放置Redirect 的所有地方。我现在按照建议将 AutoEventWireup 设置为 true。
  • 即使我在没有任何LoggedIn 逻辑的情况下将Response.Redirect("default.aspx", true); 放入Design.master,当我加载页面时它仍然不会重定向。
  • @Coulton - 添加断点以确保断点被命中。其次,检查断点只命中一次,没有无限循环的重定向。
【解决方案3】:

供您实际使用代码:

Response.Redirect("Page.aspx",True);

在重定向中使用 true 通常可以修复那些原本不起作用的晦涩时间。

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2010-11-25
    • 2012-03-18
    • 2019-02-24
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多