我不明白出了什么問題。我有 ASP:BUTTON
<asp:Button runat="server" id="btnQuestion" PostBackUrl="~/PositionForm.aspx"
OnClick="btnQuestion_Click"></asp:Button>
并有事件處理回發
protected void btnQuestion_Click(object sender, EventArgs e){}
ASP.NET 環境創建此事件
<input type="submit" name="ctl00$MainContent$btnQuestion" value="Задати питання" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$btnQuestion", "", false, "", "../../PositionForm.aspx", false, false))" id="MainContent_btnQuestion" >
不幸的是我沒有看到回發,即使我在瀏覽器中手動執行
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$btnProposal", "", false, "", "../../PositionForm.aspx", false, false))
只有當我將過去的引數更改為 true 時,我才會看到回發。這些引數是
(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
因此,如果我手動將 clientSubmit 引數從 false 更改為 true,我可以收到回發。但是為什么 ASP.NET 環境將最后一個引數設定為 false?或者其他地方出了什么問題?
uj5u.com熱心網友回復:
同時擁有按鈕單擊事件或回發 url 的意義為零。
我的意思是,post-back url 意味著、假設、建議和簡單意味著按鈕點擊是導航到整個新頁面。這當然意味著您導航到的另一個新頁面將在第一頁加載時具有 post-back = false。
但是,您不能(不應掛起)一個按鈕上的兩個功能。如果那個按鈕點擊是對當前頁面進行操作,那么當然需要去掉post-back url。
所以,那個按鈕的一般操作不應該有一個回傳的url,也不需要一個。
那么,什么是回傳網址呢?
兩個巨大的理由。
首先,當然你可以設定一個按鈕來導航/跳轉到一個新頁面,并且不需要背后的代碼。所以這有點方便。
但原因和功能的真正大騙子?
當您使用回發 url 跳轉到另一個頁面時?您還可以使用 page.Previous!!!!
這意味著在新頁面上,您可以從上一頁選擇任何值、任何控制元件。毋庸置疑,這可以為您節省大量引數、session() 值以及誰知道您可能還想要或用于傳遞值的其他內容。
所以即使是gridview文本框中的選定行,也可以在目標頁面中使用上一頁的整個shebang。
但僅在第一頁加載時!!
盡管如此,這是一筆巨大的交易。
但是,如果那個按鈕不只是跳轉到另一個頁面?然后洗掉回發網址,您不需要它,不想要它,并且將回發網址用于您所在的同一頁面是沒有意義的。事實上,這樣做會重新加載整個頁面,并且第一次回發將是錯誤的。
因此,如果您確實使用了按鈕的回傳 url 功能,那么在目標頁面中,如前所述,使用它是 FANTASIC,因為可以在該目標頁面中選取并使用所有先前的控制元件及其值.
因此,如果我設定回發 url,那么在 TARGET 頁面中,我現在可以從呼叫頁面中選擇任何控制元件,如下所示:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
' get value of text box 1 from pevious page
Dim txt1 As TextBox
txt1 = Page.PreviousPage.FindControl("TextBox1")
Debug.Print("text box 1 from previous page = " & txt1.Text)
End If
End Sub
請記住,您只能在第一頁加載時執行上述操作(回發 = false)。
但是,毫無疑問,這可以為您節省大量引數或使用 session() 從呼叫頁面傳遞大量值。
總之:
setting post-back URL of a button is ONLY of use to navigate to a new page.
setting post-back URL means you don't have to write or have a button event
behind, and it MAKES NO SENSE to have a event stub, since clicking the
button is assumed to jump/navigate to a NEW web page.
setting and use of post-back gets you that fantastic magic trick of being
able to use page.Previous to pick up any and all controls from that
previous page.
底線:
If you are going to set use post-back URL feature, then do NOT attempt to have a code behind or event, since that purpose and use assumes the button click is going to navigate to a new page. any other use, or even trying to set post-back url to the same current page you are on does not make sense, nor does having a button event code sub for that button make any sense in this case either.
If you wanting to have a simple click event for that button, then remove the post-back url setting of that button. You don't need nor want as such in the case of a button click to run code behind in the given web page you have.
uj5u.com熱心網友回復:
所以,我最終的解決方案來解決這個案例。這不是兒童網站或演示網站,這是真正的 ASP.NET 網站,每頁有數千個或更多按鈕。

我嘗試增加 maxRequestLength 或其他 ASP.NET 調整都沒有成功。__DoPostBack 即使我手動執行它也不起作用。

我不明白確切的原因 - JS 超時或其他限制,但我的最終解決方案看起來像
<asp:Button runat="server" id="btnQuestion" ClientIDMode="Static" CausesValidation="false" PostBackUrl="~/PositionForm.aspx" Text="Question" ></asp:Button>
并且比我需要的引數(當然不是所有 1000 個長隱藏欄位,但我在回發中需要一些隱藏欄位)
$("#btnQuestion").attr("onclick", "$.ajax({type:'POST',url:'/PositionForm.aspx', data: { '__EVENTTARGET': 'btnQuestion'}});");
當然,在這種情況下,服務器事件不會自動鏈接。IsPostback 事件需要通過自己的代碼進行分離和處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/341467.html
上一篇:為什么方法要修改加載頁面中的List<string>變數?
下一篇:有沒有辦法在ASP.netWebForms中的web.config模塊標記中洗掉“runAllManagedModulesForAllRequests”而不丟失其功能?
