2011-05-05 61 views
3

我正在C#中創建一個ASP.NET頁面來添加/修改細節,然後將這些細節保存在MySQL數據庫中。爲此,我創建了一個主頁面「Main.Master」,一個網頁內容表單「modify.aspx」及其後面的代碼。 「Main.Master」的代碼如下所示。 Master包含表單標籤聲明。C#.NET表單提交無法獲取表單元素的新值/修改值

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Main.master.cs" Inherits="WebApplication.Main" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form id="mainmasterform" method="post" runat="server"> 
     <div id="container"> 
      <div id="maincontent"> 
       <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
       </asp:ContentPlaceHolder> 
      </div> 
     </div> 
    </form> 
</body> 
</html> 

「modify.aspx」的代碼如下所示。只有表單元素出現在這個頁面中。

<%@ Page Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeBehind="modify.aspx.cs" Inherits="WebApplication.modify" Title="Untitled Page" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<table align="center"> 
    <tr> 
     <td><label for="ownfname">First Name</label></td> 
     <td><asp:TextBox id="ownfname" runat="server" TextMode="SingleLine"/></td> 
    </tr> 
    <tr> 
     <td><label for="ownlname">Last Name</label></td> 
     <td><asp:TextBox id="ownlname" runat="server" TextMode="SingleLine"/></td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <asp:Button ID="submitowner" runat="server" Text="Submit" onclick="modifyDetails" /> 
     </td> 
    </tr> 
</table> 
</asp:Content> 

開「submitowner」按鈕的點擊提交「modify.aspx」發送給控制器的方法「modifyDetails」存在於隱藏文件「modify.aspx.cs」的代碼。 「modifyDetails」代碼如下。

protected void modifyDetails(object sender, EventArgs e) { 
     string cmdstr = "UPDATE owners SET first_name=?, last_name=? WHERE userid=?"; 
     OdbcConnection odbccon = new OdbcConnection(ConfigurationManager.ConnectionStrings["MySQL55"].ConnectionString); 
     OdbcCommand odbccmd = new OdbcCommand(cmdstr, odbccon); 
     string fname = ownfname.Text; 
     string lname = ownlname.Text; 
     odbccmd.Parameters.Add("@fname", OdbcType.NVarChar, 50).Value = fname; 
     odbccmd.Parameters.Add("@lname", OdbcType.NVarChar, 50).Value = lname; 
     odbccmd.Parameters.Add("@userid", OdbcType.Int).Value = userid; 
     odbccon.Open(); 
     odbccmd.ExecuteScalar(); 
    } 

現在我面臨着獲取表單元素新值的麻煩。例如,當網頁在「ownfname」中呈現的文本是「Robert」時,然後將其修改爲「David」,然後單擊「提交」按鈕。提交訪問後,「ownfname.Text」屬性仍然給出「羅伯特」而不是「大衛」。我試圖尋找解決方案,但沒有運氣。

我無法理解這裏的確切問題。 代碼是否錯誤?任何人都可以幫我找出問題嗎? 對於這麼長的問題,我表示歉意。

+0

如果我下面的回答不起作用,請提供更多關於如何填寫表單字段的信息,並提供更多的代碼beind頁面(.aspx.cs頁面) – 2011-05-05 06:19:50

回答

2

如果要加載的初始值到頁面加載你的表單字段,你需要使用

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //Populate form fields 
    } 
} 

這將確保字段不會被覆蓋上回發。

如果您不太熟悉ASP.net頁面生命週期this article是非常值得的閱讀。它解釋了加載asp.net頁面時的事件順序。

+0

非常感謝Jon P.您的解決方案適用於我。你能指導我閱讀文檔/教程來理解這個概念嗎? – VGNU 2011-05-05 06:19:44

+0

看看我剛​​剛添加的文章,解釋了這個循環很不錯。我在早期做的另一個技巧是爲我正在使用的每個事件(頁面加載,按鈕單擊等)添加調試中斷點,然後調試頁面,以便更好地理解什麼時候會運行。閱讀完文章後,接受我的答案將不勝感激(點擊打勾)。 upvote也會很好(點擊向上箭頭) – 2011-05-05 06:24:56