簡體   English   中英

ASP.NET C#檢查母版頁中的FORM值

[英]ASP.NET C# Check for FORM value in Master Page

我有一個用C#編寫的ASP.NET網頁。 在我的母版頁中,我有一個<select>元素,該元素允許用戶在兩​​個不同的數據庫之間切換。 我以為我可以將代碼添加到母版頁Page_Load()方法中,以檢查包含選擇內容的表單是否已提交,如果是,則設置一些會話變量來定義我要連接的數據庫。

問題是,它看起來像頁面本身在母版頁的Page_Load方法之前加載,因為當我提交表單時,它確實更新了會話變量,但是我的查詢仍在查看原始數據庫。 但是,如果我兩次提交表格,它將進行注冊。

我猜測母版頁的Page_Load方法必須在頁面的Page_Load方法之后觸發。 有什么地方可以放置我的代碼,以便在所有頁面上觸發該代碼,但在頁面加載之前執行?

我要做的就是...

if (Request.Form["database"] != null) {
     Session["database"] = Request.Form["database"];
}

您從頁面上獲得了對母版頁的引用。 您可以調用findcontrol獲取選擇。

Master.FindControl("IDofYourSelect");

要使此工作正常,您應該使用asp:dropdownlist而不是select!

現在您可以在需要db-connection之前處理頁面代碼內的連接選擇

這可以通過構建自己的IHttpModule實現並將其注冊到web.config文件中來實現。

https://msdn.microsoft.com/zh-CN/library/ff649096.aspx

public class DatabaseSwitchModule : IHttpModule
{
    private HttpApplication httpApp;
    public void Init(HttpApplication httpApp)
    {
        this.httpApp = httpApp;
        httpApp.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);
    }

    public void OnPreRequestHandlerExecute(object sender, EventArgs e)
    {
        NameValueCollection form = httpApp.Request.Form;
        if (form["database"] != null)
        {
            httpApp.Session["database"] = form["database"];
        }
    }
}

這樣,即使將來將來要切換到另一個母版頁(或對其他頁面使用不同的母版頁),也可以確保正確地處理會話。

您真的不應該信任母版頁來執行重要的業務邏輯。 頁面和母版頁用於顯示。

在ASP.NET WebForms中,始終從最內層向外處理Page事件。 這意味着該事件將始終始終首先在“內容”頁面上觸發,然后繼續進入母版頁。

您可以采用的一種策略是在頁面生命周期的較早階段掛入一個事件,該事件將在其進入內容頁面之前在母版頁面上觸發。

見在回答這個職位頁面生命周期的參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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