如何使母版页在每个页面的标签上显示一个值
How to make Master Page to display a value on its label on each page
我正在为我们的网站设计一个变更请求 (CR) 模块,它允许用户提出 CR 并提交以供审核。提出 CR 后会立即生成一个工作流,因此,用户必须通过向他的 activity 投票提交它(说 activity 为 'Submit to CCB')。然后我设置一个添加到母版页的标签值 'In Review' 我现在可以看到标签值,并立即导航到下一个 activity(下一页)。但我在下一页看不到标签的价值。
由于我是母版页概念的新手,无法找出原因。
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的Form_Load
事件中使用它来显示状态。但我不知道如何在那里使用它。无法在那里创建实例来访问此 属性。
设置标签值后调用重定向没有意义。
Master.CRStatus = "In Review";
Response.Redirect("CCB.aspx");
当您重定向时,框架会向客户端浏览器发送一个 HTTP 重定向,当前的 request/response 循环结束并开始一个全新的循环。这意味着整个页面生命周期都将再次加载,包括母版页。
要使其正常工作,请更新您的 Session,执行重定向,然后在下一页的 Page_Load
中检查 Session 以查看该值是否存在,并相应地更新标签。
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();
}
}
}
尝试将默认值设置为 WorkflowSignoffStatus
,然后检查控件是否 return BtnToCCB_Click
上的正确值。
我正在为我们的网站设计一个变更请求 (CR) 模块,它允许用户提出 CR 并提交以供审核。提出 CR 后会立即生成一个工作流,因此,用户必须通过向他的 activity 投票提交它(说 activity 为 'Submit to CCB')。然后我设置一个添加到母版页的标签值 'In Review' 我现在可以看到标签值,并立即导航到下一个 activity(下一页)。但我在下一页看不到标签的价值。 由于我是母版页概念的新手,无法找出原因。
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的Form_Load
事件中使用它来显示状态。但我不知道如何在那里使用它。无法在那里创建实例来访问此 属性。
设置标签值后调用重定向没有意义。
Master.CRStatus = "In Review";
Response.Redirect("CCB.aspx");
当您重定向时,框架会向客户端浏览器发送一个 HTTP 重定向,当前的 request/response 循环结束并开始一个全新的循环。这意味着整个页面生命周期都将再次加载,包括母版页。
要使其正常工作,请更新您的 Session,执行重定向,然后在下一页的 Page_Load
中检查 Session 以查看该值是否存在,并相应地更新标签。
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();
}
}
}
尝试将默认值设置为 WorkflowSignoffStatus
,然后检查控件是否 return BtnToCCB_Click
上的正确值。