簡體   English   中英

如何使用 C# 從 ASP.NET 的母版頁中更改內容頁?

[英]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>&copy; <%: 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";

    }

編輯#2:如何重定向到另一個頁面

在許多情況下,我會說用戶導航到一個頁面,但這不是我想要的頁面。

例如,我有一個項目頁面,我們只能從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM