我正在使用帶有 asp.net 和 C# 的 Visual Studio 網路表單。我需要讓我的單選按鈕在頁面上動態更改,但不要在單擊按鈕時運行函式。如何解決此回發問題?
在我的頁面上,我有一個單選按鈕,可以從英語或法語動態更改頁面
<asp:RadioButtonList ID="RadioBtnLanguage" runat="server" AutoPostBack="True" ViewStateMode="Enabled" Width="227px" RepeatDirection="Horizontal">
<asp:ListItem value="English" Selected="True"> English</asp:ListItem>
<asp:ListItem Value="French"> Fran?ais</asp:ListItem>
</asp:RadioButtonList>
我這樣改變語言:
protected void Page_Load(object sender, EventArgs e)
{
switch (RadioBtnLanguage.SelectedValue.ToString())
{
case "English":
LblTitle.Text = "InfoHere"
changeAttendType();
break;
case "French":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
}
}
這很好用。但是我有一個changeAttendType();我不想在單擊提交按鈕時運行的功能
<asp:Button ID="ButtonEditEvent" runat="server" Text="Submit"
onclick="ButtonEditEvent_Click" CssClass="formbutton"/>
當有人將語言單選按鈕從英語更改為法語或法語或英語時,我怎么能不運行changeAttendType();按鈕單擊但讓它運行?
uj5u.com熱心網友回復:
好的,在我 99% 的頁面加載中 - “許多”年的每一頁?
如果您要插入按鈕、組合框,甚至是導致回發和事件觸發的文本框?好吧,那么您必須做出“設計”選擇。
該“選擇”意味著設定代碼或您在第一頁加載時運行的任何東西都必須進入 if (!IsPostBack) 代碼塊。事實上,如果你把它排除在外?
然后各種問題接踵而至。您可能會說在頁面加載時加載一些組合框。然后用戶選擇一個組合值,但在頁面加載時您會再次觸發該加載。GridView 也是如此,幾乎所有其他東西都是如此。如果你重新加載網格,或者重新加載組合框?然后你就崩潰了,失去了他們剛剛做出的用戶選擇!!!
那么,作為第一規則呢?要控制這一點,而不是有“討厭”的驚喜?
然后使用 !IsPostback 進行真正的首頁加載。
因此,對于您的單選按鈕,您可以這樣做:
protected void Page_Load(object sender, EventArgs e)
{
{
if (!IsPostBack)
LoadLang();
}
}
void LoadLang()
{
switch (RadioBtnLanguage.SelectedValue.ToString())
{
case "English":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
case "French":
LblTitle.Text = "InfoHere";
changeAttendType();
break;
}
}
如果您真的需要單選按鈕作業,并允許用戶更改值?然后你的單選按鈕可以有一個自動回發= true,你只需為 RB 連接事件
像這樣說:
<asp:RadioButtonList ID="RadioBtnLanguage" runat="server"
AutoPostBack="True" OnSelectedIndexChanged="RadioBtnLanguage_SelectedIndexChanged">
<asp:ListItem>English</asp:ListItem>
<asp:ListItem>French</asp:ListItem>
</asp:RadioButtonList>
因此,我們有自動回發 - 是的,即使用戶更改了 RB。
偶數代碼存根就變成了這樣:
protected void RadioBtnLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
LoadLang();
}
如你看到的?永遠不要使用 page.load 事件來重新運行代碼,或者一直運行,因為頁面加載總是針對任何按鈕單擊、任何回發、任何下拉串列,甚至在上面運行 - 自動回發和 RB“改變”事件。
實際上,通過“引入”上述設計模式?您可以自由添加控制元件、按鈕、事件或其他任何內容。
因此,沒有代碼意外運行。因此,隨著時間的推移,隨著您添加更多按鈕、更多事件或其他什么?您一點也不在乎,并且每次頁面加載時都不會運行一些雜散代碼(例如您的 RB 按鈕代碼)。
該 RB 按鈕代碼不會,也不應該在每次回發時運行。但正如我們所知,page.load 每次都會觸發,并且一直觸發,每次回發。因此,將您的設定或代碼放在頁面加載中運行一次,但也要放在 !IsPostBack 存根中。
99% 或更多,實際上我創建的每個 web 表單頁面都有 !IsPostBack 存根。
如果你打破了上面的規則?那么,當一個簡單的按鈕或任何觸發回發的東西時,開發人員對運行什么代碼的控制權就會非常松散——這就是在這樣一個頁面上發生的所有事情。
因此,只需在您的所有網頁中采用 if (!IsPostBack) 代碼存根,然后您就可以撰寫代碼而無需考慮(或擔心)代碼會在您不希望的情況下每次運行,或者此類代碼每次都會運行,這不僅浪費資源,而且通常意味著您在不需要時一遍又一遍地運行代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430004.html
上一篇:學生卷號生成并存盤在資料庫中
下一篇:回傳特定位置的指標-程式集
