如何使母版页在每个页面的标签上显示一个值

时间:2015-05-22 02:00:54

标签: c# asp.net master-pages

我正在为我们的网站设计变更请求(CR)模块,该模块允许用户提出CR并提交以供审核。在提高CR后立即生成工作流程,因此,用户必须通过投票到他的活动来提交它(将活动称为'提交给CCB')。然后我设置了一个标签的值,该值已添加到母版页中,并且正在评论'我现在可以看到标签值,并立即导航到下一个活动(下一页)。但是我在下一页看不到标签的价值。 由于我是实施母版页概念的新手,无法找出原因。

WFLCRMaster.master

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="WFLCR.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form id="masterFormMIF" runat="server">
  <div id="WorkflowStatus">
   <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager> 
              <asp:UpdatePanel ID="UserUpdatePanel" runat="server">
                  <ContentTemplate>
                  <asp:Label ID="WorkflowSignoffStatus" runat ="server">            </asp:Label>
                  </ContentTemplate>
              </asp:UpdatePanel>
          </div>
          <div>
           <asp:ContentPlaceHolder id="ContentPlaceHolderMIF" runat="server">
           </asp:ContentPlaceHolder>
         </div>
    </form>
  </body>

我在WFLCR.master.cs中创建了一个属性,并在所有页面中添加了<%@ MasterType VirtualPath="~/WFLCR.master" %>

public string CRStatus
    {
        set { WorkflowSignoffStatus.Text = value; }
        get { return WorkflowSignoffStatus.Text; }
    }

这是我的Preliminary.aspx.cs

public partial class Preliminary : System.Web.UI.Page
public string WFLCRStatus
    {
        get
        {   object value = HttpContext.Current.Session["CRStatus"];
            return value == null ? "" : (string)value;
        }
        set
        { HttpContext.Current.Session["CRStatus"] = value;
        }
    } 
   protected void BtnToCCB_Click(object sender, EventArgs e)
   {
        WFLCRStatus = "In Review";
        Master.CRStatus = "In Review";
        Response.Redirect("CCB.aspx");
   }
}

为标签设置值,但在导航到下一页时标签为空。

我在master.cs&#39; Form_Load事件中使用它创建了一个属性来显示状态。但我不知道如何在那里使用它。无法在那里创建实例来访问此属性。

2 个答案:

答案 0 :(得分:1)

设置标签值后调用重定向毫无意义。

Master.CRStatus = "In Review";
Response.Redirect("CCB.aspx");

当您重定向时,框架会将HTTP重定向发送到客户端浏览器,当前请求/响应周期结束,并开始一个全新的请求/响应周期。这意味着将再次加载整个页面生命周期,包括母版页。

要使其工作,请更新您的会话,执行重定向,然后在下一页的Page_Load中检查会话以查看该值是否存在,并相应地更新标签。

WFLCRStatus.Status = "In Review"
Response.Redirect("CCB.aspx");

下一页

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        if(!String.IsNullOrEmpty(Session["CRStatus"]))
        {
            Master.CRStatus = Session["CRStatus"].ToString();
        }
    }
}

答案 1 :(得分:-1)

尝试将默认值设置为WorkflowSignoffStatus,然后检查控件是否确实在BtnToCCB_Click上返回了正确的值。