[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. 為什麼一加刪除線, 版型就亂七八糟