[ASP.NET]PostBackUrl 增加參數傳入

[ASP.NET]PostBackUrl 增加參數傳入

參考:

1. Joteke's Blog - ASP.NET: trigger cross-page postback on ListBox selection change

2. dyco - PostBackUrl帶參數

 

前者參考的範例都僅能以static的方式, 在前一頁設定其參數值, 我希望能夠讓使用者在操作頁面時來決定參數的值, 該怎麼做呢?

update 2012/01/02 91哥的建議

(1) 第一頁(aspx), 宣告一個HiddenField (可由前端JavaScript變更其值).

(2) 第一頁(aspx.cs), 宣告一個HiddenField物件.

(3) 第二頁(aspx.cs), 直接從 PreviousPage.TheHiddenField.Value 取就好.

 

------------------------------

[加碼演出] 密技之JavaScript版, 不用PreviousPage 來處理 ...

修改上方範例, 惟第二頁不需宣告PreviousPage, 而是透過"_EVENTARGUMENT"來給傳值.

"檢視": function() {
    var btn = $('#<%= hiddenSubmitToJobStep.ClientID %>');
    
    var WebForm_PostBackOptions_ext = function(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit) {
        this.eventTarget = eventTarget;
        this.eventArgument = selectedJobApId; // 直接assign value
        this.validation = validation;
        this.validationGroup = validationGroup;
        this.actionUrl = actionUrl;
        this.trackFocus = trackFocus;
        this.clientSubmit = true; // submit always by client
    }
    WebForm_PostBackOptions = WebForm_PostBackOptions_ext;    // override
    
    btn.click();
}

Page2.aspx.cs 怎麼拿值呢? 就這麼簡單拿走囉 ~

Request.Form["__EVENTARGUMENT"]

 

 

---------------- 舊的走法 (不建議使用)

 

實作的方式:

(1) 前頁增加一個隱藏的按鍵, 並以此按鍵的值(亦為Text)來傳遞.

(2) 前端畫面可在使用者操作過程式中變更按鍵的值. (非static).

(3) 本頁畫面可直接透過PreviousPage物件取得按鍵的值.

1. 第一頁(Page1.aspx)

1.1 宣告一個隱藏的按鍵

<asp:Button ID="hiddenSubmitToJobStep" runat="server" Text="Button" PostBackUrl="~/Page2.aspx" style="display:none" />

1.2 例子中以jQueryUI.dialog 實作 a. 變更按鍵的值 b. 觸發隱藏的按鍵

           // Dialog
            $('#execDialog').dialog({
                autoOpen: false,
                width: 400,
                buttons: {
                    "檢視": function() {
                        var btn = $('#<%= hiddenSubmitToJobStep.ClientID %>');
                        btn.val(selectedJobApId);
                        btn.click();
                    }
                }
            });

2. 第一頁(Page1.aspx.cs)

2.1 宣告一個按鍵物件

public Button TheHiddenSubmitToJobStep { get { return hiddenSubmitToJobStep; } }

3. 第二頁 (Page2.aspx)

3.1 宣告前一頁物件為...

<%@ PreviousPageType VirtualPath="~/Page1.aspx"  %>

4. 第二頁 (Page2.aspx.cs)

4.1 從 Request.Form 中取得變更後的值.

Request.Form[this.PreviousPage.TheHiddenSubmitToJobStep.UniqueID]

註:如果是從 this.PreviousPage.TheHiddenSubmitToJobStep.Text 取值, 則會拿到原始設定的值.

 

 

ps. 為什麼一加刪除線, 版型就亂七八糟