[英]set variable in httpmodule read in masterpage & content page, asp.net C#
[英]How to change the content page from within the masterpage in ASP.NET using C#?
我看到了相反的情況,編碼人員需要為特定內容更改母版頁。 但在這種情況下,我更擔心內容是什么,想改一下。
protected void btn_search_Click(object sender, ImageClickEventArgs e)
{
string pageName = this.ContentPlaceHolder1.Page.GetType().FullName;
if (pageName != "ASP.ChinaShipManagerHome_aspx")
{
// then change it here?!
}
}
正如您對我的情況所推測的那樣,我的母版頁上有一個“搜索”按鈕。 但是,他們可能已經偏離了“搜索”需要與之交互的內容。 因此,當他們單擊“搜索”時,需要切換回“ContentPlaceHolder1”中正確的“內容”。
這應該有效:
protected void Page_Load(object sender, EventArgs e)
{
string pageName = MainContent.Page.GetType().FullName;
if (pageName == "ASP.default_aspx")
{
// get text box 1 on child page.
TextBox tbox1 = (TextBox)MainContent.FindControl("TextBox1");
tbox1.Text = "Hello world";
}
}
我假設母版頁中的內容控件是這樣的:
<div class="container body-content">
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
<hr />
<footer>
<p>© <%: DateTime.Now.Year %> - My ASP.NET Application</p>
</footer>
</div>
因此在子頁面“default.aspx”中,我假設是這樣的:
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
因此,我們可以/應該能夠按照上述方法在該“主要內容”上使用 FindControl。
但是,看起來張貼者想要從子頁面更改母版頁面。
好的,那么假設上面,我們的文本框在母版頁上,我們想從子頁更改?
當然,那么這個:
protected void Page_Load(object sender, EventArgs e)
{
// this is child page load event, change a
// change TextBox1 that is in master page
TextBox tb1 = (TextBox)Page.Master.FindControl("TextBox1");
tb1.Text = "hello world";
}
在許多情況下,我會說用戶導航到一個頁面,但這不是我想要的頁面。
例如,我有一個項目頁面,我們只能從 MyProjects 進入該項目頁面。
因此,為了處理上述問題,我們不會將此類代碼放在主代碼中,而是將此類代碼放在子頁面中。
因此,例如,如果我們說在 Project.aspx 頁面中輸入(它是 master 的子頁面),但我想“更改”用戶獲得的頁面?
我會把這樣的代碼放在子頁面的加載中。
說:
if (Session["Projectinfo"] = null
{
// no project information passed, send user back to
// my projects page
response.redirect("MyProjects.aspx")
}
所以,作為一般規則,你不想把這樣的代碼放在母版頁中,因為那樣母版頁代碼會隨着時間的推移變得一團糟,因為你現在把邏輯放在母版頁中,在 99% 的情況下屬於給定的頁面代碼。
然而,這樣的代碼 CAN go 在母版頁中顯示不同的頁面,我們不嘗試/嘗試換出內容頁面,但實際上只是簡單地導航到我們想要的頁面,然后那個頁面作為母版的子頁,會繼續顯示母版,跳轉到正確的子頁,就萬事大吉了。
因此,我們不需要“更改”顯示的內容模板,只需使用簡單的 response.redirect 即可導航到相關子頁面。 既然那個子頁面無論如何都會顯示母版頁,那么我們就實現了與換出/改變我們無論如何要顯示的子頁面相同的目標,對吧?
換句話說,一個簡單的 response.redirect 應該足以“改變”我們要顯示的子頁面。
這是我唯一相信的方式。 我認為您實際上無法從母版頁更改文字內容占位符。
protected void btn_search_Click(object sender, ImageClickEventArgs e)
{
string pageName = this.ContentPlaceHolder1.Page.GetType().FullName;
if (pageName != "ASP.chinashipmanagerhome_aspx")
{
string t = Base64Encode(tb_search.Text);
Response.Redirect("ChinaShipManagerHome.aspx?search2=" + t); //Redirect with query
}
然后在我添加的“Page_Load”中,在檢查該人沒有丟失 session 之后。我還確保它不是回發。
else
{
if (Request.QueryString["search2"] != null)
{
tb_search.Text = Base64Decode(Request.QueryString["search2"].ToString());
btn_search_Click(this, new ImageClickEventArgs(1, 1));
}
}
在這里它回憶起“btn_search_click”但現在它在正確的頁面上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.