[英]Accessing variable from code behind Master Page
請看下圖
如您所見,我有一個母版頁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");
}
}
只需在Design.master.cs
的Page_Load
方法中執行此Design.master.cs
:
protected void Page_Load(object sender, EventArgs e){
if (result){
Response.Redirect("....");
}
}
這比在標記文件中破壞代碼要整潔得多,而且這種技術只會在將來給您帶來麻煩。
默認情況下, AutoEventWireUp
設置為false。 查看您的聲明,這就是為什么母版頁方法未連接的原因。 將聲明更改為
<%@ Master Language="C#" AutoEventWireup="true"
然后,您可以添加類似
protected override void OnInit(EventArgs e)
{
if(!loggedIn)
Response.Redirect("login.aspx", false);
//...
}
為您的實際代碼使用:
Response.Redirect("Page.aspx",True);
重定向中包含true時通常可以解決那些晦澀的情況,否則它將無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.