2016-12-13 25 views
0

因爲我是ASP .NET的新手我不知道這是正常行爲還是奇怪的事情。我正嘗試將C#WinForms應用程序轉換爲Web應用程序,並且其行爲與我預期的不同。所有的控件都在asp.net中被觸發

在桌面應用程序中,我在用戶按下輸入文本框後獲取數據。數據被加載我可以修改它,然後,當我完成數據更改時,我可以按兩個按鈕中的一個,並將數據保存到數據庫或清除表格。像這樣的東西。

private int idOrder; 

    protected void TextBox1_TextChanged(object sender, EventArgs e) 
    { 
     if(load_data) 
     { 
      label1.Text = "some loaded data"; 
      ... 
      else{ MessageBox.Show("Something went wrong. No data loaded"); 
     } 


    } 

    protected void Button2_Click(object sender, EventArgs e) 
    { 
      //save to database; 
    } 

但是,當我嘗試做在ASP.NET Web窗體一樣,每當我按在文本框控件的所有被解僱輸入(因爲它是行之後寫的源代碼行)刷新頁面時。你能否建議我們應該怎麼做才能複製winforms中的相同行爲,例如:用戶輸入 - 輸入 - 加載數據 - 修改 - 按下按鈕,當我想要的。謝謝。

//我正在尋找視圖狀態的東西嗎?

+0

查看ispostback。另外,請包含不起作用的示例代碼。 – Trey

+0

這是一個關於ASP.Net頁面生命週期的有用的MSDN頁面。 https://msdn.microsoft.com/en-us/library/ms178472.aspx正如@Trey所說,周圍的代碼應該不會在回發時用'if(!Page.isPostBack)'執行'可以幫助,但我不是確定究竟是什麼問題。 – ScoobyDrew18

+0

您不能在ASP.NET中使用MessageBox類。這是Windows窗體特有的。 – mason

回答

0

這是一個片段,讓你開始。請記住,按Enter鍵時發佈HTML表單是網站的默認行爲。因此,第一件事是通過將文本框和提交按鈕與DefaultButton分配給Panel來防止這種情況。現在,在TextBox1按下回車時,它會發布形式dummyButton

接下來我們添加一個OnTextChanged事件TextBox1並設置AutoPostBacktrue。當TextBox1的焦點丟失時,這將會啓動。您可以刪除它,只需使用dummyButton即可。

添加dummyButton是爲了確保當在TextBox1中按下Enter鍵時,表單將回發,以獲得所需的行爲。

<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1"> 
    <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox> 
    <br /> 
    <br /> 
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    <br /> 
    <br /> 
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
    <asp:LinkButton ID="dummyButton" runat="server" OnClick="TextBox1_TextChanged"></asp:LinkButton> 
</asp:Panel> 

然後在代碼後面。

protected void TextBox1_TextChanged(object sender, EventArgs e) 
{ 
    //load from database 
    Label1.Text = TextBox1.Text; 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    //save to database 
    Label1.Text = "Data saved!"; 
    TextBox1.Text = ""; 
} 

您還可以防止回傳,就像這樣進入。 JavaScript將阻止所有進入。例如,根據您的頁面設計,您可以在<body>標記中設置此項。

<div onkeydown="return (event.keyCode!=13);"> 
    <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox> 
</div> 
+0

非常感謝。它解決了我的問題。看來有很多東西要爲我學習:) – Bendom

相關問題