C# OnClick按钮仅在第二次Asp.NET c之后工作#

C# OnClick按钮仅在第二次Asp.NET c之后工作#,c#,asp.net,C#,Asp.net,我是网络开发新手,现在我正在一个网站上工作。我对ASP.Net(前端)web表单上的“保存”按钮有问题(后端是C#)。该按钮用于将文本框中输入的数据保存到数据库中 第一次单击Save按钮时,页面只是“重新加载”并清除文本框,SQL Server数据库(dbo连接)中不会保存任何内容。然后,当我在文本框中重新输入信息后第二次单击相同的“保存”按钮时,它实际上会保存到数据库并返回到主菜单页面(如预期的那样)。如果我尝试重新输入不同的信息,“保存”按钮将正常工作 当用户登录并导航到输入数据并保存数据的

我是网络开发新手,现在我正在一个网站上工作。我对ASP.Net(前端)web表单上的“保存”按钮有问题(后端是C#)。该按钮用于将文本框中输入的数据保存到数据库中

第一次单击Save按钮时,页面只是“重新加载”并清除文本框,SQL Server数据库(dbo连接)中不会保存任何内容。然后,当我在文本框中重新输入信息后第二次单击相同的“保存”按钮时,它实际上会保存到数据库并返回到主菜单页面(如预期的那样)。如果我尝试重新输入不同的信息,“保存”按钮将正常工作

当用户登录并导航到输入数据并保存数据的页面时,就会出现问题。它永远不会第一次起作用

不幸的是,出于保密目的,我不得不省略并重命名某些文件路径/目录和表名

以下是我的Asp.NET代码:

<%@ Page Language="C#" debug="True" Inherits="Default" src="Default.cs"      AutoEventWireup ="true"%>
<%@ Register TagPrefix="ob" TagName="ComboTree"  Src="/obout/Combotree/ComboTree.ascx" %>
<%@ Reference Control="/obout/Combotree/ComboTree.ascx" %>

<HTML>

<HEAD>
<!-- #INCLUDE VIRTUAL="/.../" -->

</HEAD>

<BODY >
<FORM runat="server">
  <BASEFONT face="Arial, Helvetica, Sans Serif" color=black size=2>
    <TABLE height="100%" cellSpacing=0 cellPadding=0 width="780" align=Center border=0>
      <!-- #INCLUDE VIRTUAL="/.../" -->
      <TR VALIGN="top">
      <!-- #INCLUDE VIRTUAL="/.../" -->
   `enter code here`<TD vAlign=top width="100%" HEIGHT="100%">
   <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0 HEIGHT="100%">
   <!-- #INCLUDE VIRTUAL="/.../" -->  
   <TR>
      <!-- #INCLUDE VIRTUAL="/.../" -->  
      <TD vAlign=top align=left >
      <!--- START YOUR CODE HERE!!!!! --->
      <script>
        function disableListItems(checkBoxListId, disable)
        {
            // Get the checkboxlist object.
            ctr = 0;
            while(1 == 1)
            {
                checkbox = document.getElementById(checkBoxListId + "_" + ctr);
                if(checkbox == null)
                {        
                    return;
                }
                checkbox.checked = true;
                checkbox.disabled = disable;
                ctr++;
            }

        }         

        function checkForm()
        {
            var errMsg = "";
            if(isBlank(document.getElementById("tbName").value))
            {
                errMsg += "\n-Folder Name";
            }

            if(errMsg!="")
            {
                alert("The following fields cannot be left blank." + errMsg);
                return false;
            }
            return true;

        }
      </script>
      <font Class="heading">File Library - <ASP:Label ID="lbTitle" RunAt="Server"/> Folder</font>
        <INPUT Type="Hidden" ID="hdFolderID" RunAt="Server"/>
        <INPUT Type="Hidden" ID="hdParentFolderID" RunAt="Server"/>
        <TABLE CellPadding="4" CellSpacing="0" Width="100%" >
        <TR>
            <TD ColSpan="2" Class="spreadsheet_line">&nbsp;</TD>
        </TR>
        <TR>
            <TD Class="Spreadsheet"><B>Name</B></TD>
            <TD Class="Spreadsheet" Width="100%"><ASP:TextBox ID="tbName" Columns="34" RunAt="Server"/></TD>
        </TR>
        <TR VAlign="Top" Visible="False" RunAt="Server">
            <TD Class="Spreadsheet" NOWRAP><B>Description</B></TD>
            <TD Class="Spreadsheet"><ASP:TextBox ID="tbDescription" TextMode="Multiline" Cols="25" Rows="5" RunAt="Server"/></TD>
        </TR>           
        <TR>
            <TD Class="Spreadsheet"><B>Active?</B></TD>
            <TD Class="Spreadsheet"><ASP:CheckBox ID="cbActive" RunAt="Server"/></TD>
        </TR>           
        <TR Visible="False" RunAt="Server">
            <TD Class="Spreadsheet"><B>Folder</B></TD>
            <TD Class="Spreadsheet"><ob:ComboTree id="ctFolders" runat="server"/></TD>
        </TR>
        <TR VAlign="Top" ID="trLicensees" RunAt="Server">
            <TD Class="Spreadsheet"><B>Departments</B></TD>
            <TD Class="Spreadsheet">
                <ASP:DropDownList ID="ddLicensee" DataTextField="Name" DataValueField="DepartmentId" RunAt="Server"/>
                <ASP:CheckBox ID="cbAll" Text="All" RunAt="Server"/>
                <div style="text-align: left; width: 30%; margin-left:-3px">
                    <ASP:CheckBoxList ID="cblLicensees" DataTextField="Name" DataValueField="DepartmentId" style="background-color:F3F3F3" RunAt="Server"/> <!--**-->
                </div>
            </TD>
        </TR>
        <TR>
            <TD Class="Spreadsheet" Align="Right" ColSpan="2">
                <ASP:ImageButton ID="btnSave" OnClick="btnSave_OnClick" ImageUrl="/images/buttons/btnSave.gif" RunAt="Server"/>
            </TD>
        </TR>
        </TABLE>
      <!--- END YOUR CODE HERE!!!!! --->
      </TD>
      <!-- #INCLUDE VIRTUAL="/.../" -->  
   </TR>
   <!-- #INCLUDE VIRTUAL="/.../" -->  
  </TABLE>
</TD>
<!-- #INCLUDE VIRTUAL="/.../" -->  
</TR>
<!-- #INCLUDE VIRTUAL="/.../" -->  
</TABLE>
</BASEFONT>
</FORM>
</BODY>
</HTML>

我已经为此挣扎了两天多,我不明白为什么第一次按钮没有启动,而只是第二次启动。任何帮助都将不胜感激。谢谢。

您应该在执行
cmd.ExecuteNonQuery()
方法之前打开连接,即
Conn.open()


如果仍然不起作用,请尝试在
webform.aspx
的第一行,即
中,您应该在执行
cmd.ExecuteNonQuery()
方法之前打开连接,即
Conn.open()


试试这个,如果还是不行的话,在
webform.aspx
的第一行,即
中,我通过在asp.NET代码的
标记中添加
EnableViewState=False
使其工作,尝试调试并查看第一次单击按钮时触发的事件,我怀疑这是webform.aspx第一行中的Page_Load event,即尝试调试并查看在第一次单击按钮时触发的事件,我怀疑这是webform.aspx第一行中的Page_Load event,即尝试了两者,但不幸的是,它仍然无法工作。还有其他建议吗?两个都试过了,但不幸的是仍然不起作用。还有其他建议吗?
    public void btnSave_OnClick(object sender, System.Web.UI.ImageClickEventArgs E){    
    int counter = int.Parse(Request.Cookies["counter"].Value);
    counter++;
    Response.Cookies["counter"].Value = counter.ToString();

    try{
    SqlConnection Conn = GetConnection();
    string SQL;
    SqlCommand Cmd;
    SqlDataReader Dtr;

        if(hdFileID.Value=="")
        {
            Response.Write("Executing Save (adding new folder to DB");
            SQL = "EXEC sp_File_Add @Name,@Description,@UserID";
            Response.Write("Save successfully executed. Added to DB");
        }
        else
        {
            Response.Write("Executing Save (saving info of folder to DB");
            SQL = "EXEC sp_File_Update @Name,@Description,@UserID,@FileID";
            Response.Write("Save successfully executed. Saved to DB");
        }




        Cmd = new SqlCommand(SQL,Conn);

        Cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.VarChar));
        Cmd.Parameters["@Name"].Value = tbName.Text;

        Cmd.Parameters.Add(new SqlParameter("@Description", SqlDbType.Text));
        Cmd.Parameters["@Description"].Value = tbDescription.Text;

        Cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int));
        Cmd.Parameters["@UserID"].Value = Convert.ToInt32(hdUserID_Global.Value);

        if(hdFileID.Value!="")
        {
            Cmd.Parameters.Add(new SqlParameter("@FileID", SqlDbType.Int));
            Cmd.Parameters["@FileID"].Value = Convert.ToInt32(hdFolderID.Value);
        }

        Cmd.ExecuteNonQuery();

        if(hdFileID.Value=="")
        {
            SQL = "SELECT MAX(FileID) AS FileID FROM tbl_File WHERE CreatedByUserID=@UserID";
            Cmd = new SqlCommand(SQL,Conn);

            Cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int));
            Cmd.Parameters["@UserID"].Value = Convert.ToInt32(hdUserID_Global.Value);

            Dtr = Cmd.ExecuteReader();

            if(Dtr.Read())
            {
                hdFileID.Value = Dtr["FileID"].ToString();
            }
            Dtr.Close();
        }

        SQL = "DELETE FROM tbl_FileLicense ";
        SQL += " WHERE FileID=@FileID ";

        Cmd = new SqlCommand(SQL,Conn);

        Cmd.Parameters.Add(new SqlParameter("@FileID", SqlDbType.Int));
        Cmd.Parameters["@FileID"].Value = Convert.ToInt32(hdFileID.Value.ToString());

        Cmd.ExecuteNonQuery();

        if(ddLicense.Visible)
        {
            SQL = "EXEC sp_doc_Folder_Add @FileID,@LicenseID,@UserID";
            Response.Write("Save successfully executed. Added to DB");
            Cmd = new SqlCommand(SQL,Conn);

            Cmd.Parameters.Add(new SqlParameter("@FolderID", SqlDbType.Int));
            Cmd.Parameters["@FileID"].Value = Convert.ToInt32(hdFileID.Value.ToString());

            Cmd.Parameters.Add(new SqlParameter("@LicenseID", SqlDbType.Int));
            Cmd.Parameters["@LicenseID"].Value = Convert.ToInt32(ddLicense.SelectedItem.Value.ToString());

            Cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int));
            Cmd.Parameters["@UserID"].Value = Convert.ToInt32(hdUserID_Global.Value);

            Cmd.ExecuteNonQuery();
        }
        else
        {
        }

        Conn.Close();
        Response.Redirect("/Library/Default2.aspx?FileID=" + Request["RootFileID"].ToString());
        Response.End();
    }

    catch (Exception e){
        Response.Write("An error occurred while saving: " + e);
        Response.End();
    }

}