繁体   English   中英

动态文本框不会更改值ASP.Net和C#

[英]Dynamic TextBoxes not changing value ASP.Net and C#

我目前正在页面加载时动态填充文本框。 然后我使用一个OnClick命令从所述文本框中提取信息

我的ASPX表

<div class="mi_Container" id="Edit">
<div class="mi_Title">
    <asp:Label ID="App_Name_E" runat="server" />
</div>
<hr />
<table class="mi_Inner_Container">
    <tr>
        <td class="mi_Desc">
            Description: <br />
            <asp:TextBox ID="Description_E"  Rows="6" CssClass="mi_Textarea" TextMode="MultiLine" runat="server" />
        </td>
        <td class="mi_Center">
            Upload Test Script:<br />
        </td>
    </tr>
    <tr>
        <td class="mi_Rows">
            Application Owner: <br />
            <asp:TextBox ID="App_Owner_E" runat="server" />
        </td>
        <td class="mi_Center">
            <div class="mi_Img_Icons">
                Migration Status:<br />
                <asp:DropDownList ID="CS_E" runat="server" DataSourceID="Migration_Status_Source" DataTextField="Name" DataValueField="ID"></asp:DropDownList>
            </div>
            <div class="mi_Img_Icons">
                Migration Progress:<br />
                <asp:DropDownList ID="CP_E" runat="server" DataSourceID="Migration_Progress_Source" DataTextField="Name" DataValueField="ID"></asp:DropDownList>
            </div>
        </td>
    </tr>
    <tr>
        <td class="mi_Rows">
            Technical Service Owner: <br />
            <asp:TextBox ID="TSO_E" runat="server" />
        </td>
        <td class="mi_Center">   
            Migration Phase: <br />
            <asp:DropDownList ID="Migration_Phase_E" runat="server" DataSourceID="Migration_Phase_Source" DataTextField="Name" DataValueField="ID"></asp:DropDownList>
        </td>
    </tr>
            <tr class="mi_Rows">
        <td>
            Responsible Manager: <br />
            <asp:TextBox ID="Responsible_Manager_E" runat="server" />
        </td>
        <td class="mi_Center">
            Next Steps: <br />
            <asp:TextBox ID="Next_Steps_E" runat="server" />
        </td>
    </tr>
    <tr class="mi_Rows">
        <td>
            Signed Off by: <br />
            <asp:TextBox ID="Sign_Off_E" runat="server" />
        </td>
        <td class="mi_Center">
            <asp:Button ID="Update" runat="server" Text="Update Application" onclick="Update_Click" />
        </td>
    </tr>
</table>

我背后的C#代码(相关)

        protected void Page_Load(object sender, EventArgs e)
    {
        ((Label)Master.FindControl("titleBar")).Text = "More Information";

        float ID = float.Parse(Request.QueryString["ID"]);
        DataTable tbl = appsql.appSpecific(ID);

        App_Name_E.Text = tbl.Rows[0]["App_Name"].ToString();
        Description_E.Text = tbl.Rows[0]["Description"].ToString();
        App_Owner_E.Text = tbl.Rows[0]["App_Owner"].ToString();
        CS_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Coexistence_Status"].ToString()));
        CP_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Coexistence_Progress"].ToString()));
        TSO_E.Text = tbl.Rows[0]["TSO"].ToString();
        Migration_Phase_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Migration_Phase"].ToString())) + 1;
        Responsible_Manager_E.Text = tbl.Rows[0]["Responsible_Manager"].ToString();
        Next_Steps_E.Text = tbl.Rows[0]["Next_steps"].ToString();
        Sign_Off_E.Text = tbl.Rows[0]["Sign_Off"].ToString();
    }

    protected void Update_Click(object sender, EventArgs e)
    {
        string DESC = Description_E.Text;
        string AO = App_Owner_E.Text;
        float CS = float.Parse(CS_E.SelectedValue);
        float CP = float.Parse(CP_E.SelectedValue);
        string TSO = TSO_E.Text;
        float MP = float.Parse(Migration_Phase_E.SelectedValue);
        string RM = Responsible_Manager_E.Text;
        string NS = Next_Steps_E.Text;
        string SO = Sign_Off_E.Text;


        using (SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["app_migrationConnectionString"].ConnectionString))
        {

            SqlCommand cmd = new SqlCommand("UPDATE Apps SET Description = @DESC, App_Owner = @AO, Coexistence_Progress = @CP, Coexistence_Status = @CS, TSO = @TSO, Migration_Phase = @MP, Responsible_Manager = @RM, Next_Steps = @NS, Sign_Off = @SO, Last_Update = @LU Where ID = @ID", connection);

            cmd.Parameters.Add("@ID", SqlDbType.Float);
            cmd.Parameters["@ID"].Value = float.Parse(Request.QueryString["ID"]);

            cmd.Parameters.Add("@DESC", SqlDbType.VarChar, -1);
            cmd.Parameters["@DESC"].Value = DESC;

            cmd.Parameters.Add("@AO", SqlDbType.VarChar, -1);
            cmd.Parameters["@AO"].Value = AO;

            cmd.Parameters.Add("@CS", SqlDbType.Float);
            cmd.Parameters["@CS"].Value = CS;

            cmd.Parameters.Add("@CP", SqlDbType.Float);
            cmd.Parameters["@CP"].Value = CP;

            cmd.Parameters.Add("@TSO", SqlDbType.VarChar, -1);
            cmd.Parameters["TSO"].Value = TSO;

            cmd.Parameters.Add("@MP", SqlDbType.VarChar, -1);
            cmd.Parameters["@MP"].Value = MP;

            cmd.Parameters.Add("@RM", SqlDbType.VarChar, -1);
            cmd.Parameters["@RM"].Value = RM;

            cmd.Parameters.Add("@NS", SqlDbType.VarChar, -1);
            cmd.Parameters["@NS"].Value = NS;

            cmd.Parameters.Add("@SO", SqlDbType.VarChar, -1);
            cmd.Parameters["@SO"].Value = SO;

            cmd.Parameters.Add("@LU", SqlDbType.DateTime);
            cmd.Parameters["@LU"].Value = DateTime.Now;
            try
            {
                connection.Open();
                cmd.ExecuteNonQuery();
                connection.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

因此,当我运行OnClick时,它确实可以正确运行SQL命令,因为最后一个更新字段可以正确复制并更新SQL行。 我的问题是所有其他变量都未设置为新值。

我最近一直在为这个项目发布所有问题,这恰好是我第一次使用ASP。

我假设它与页面如何处理变量有关。 我只是更改值,而不会再次设置它们。

任何和所有帮助表示赞赏。

我的问题是所有其他变量都未设置为新值。

我假设这些值在数据库中不会更改,因为您总是在事件处理程序中对其进行更新之前将它们加载到Page_Load中。

您只需将其包装在!PostBack -check中:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        ((Label)Master.FindControl("titleBar")).Text = "More Information";

        float ID = float.Parse(Request.QueryString["ID"]);
        DataTable tbl = appsql.appSpecific(ID);

        App_Name_E.Text = tbl.Rows[0]["App_Name"].ToString();
        Description_E.Text = tbl.Rows[0]["Description"].ToString();
        App_Owner_E.Text = tbl.Rows[0]["App_Owner"].ToString();
        CS_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Coexistence_Status"].ToString()));
        CP_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Coexistence_Progress"].ToString()));
        TSO_E.Text = tbl.Rows[0]["TSO"].ToString();
        Migration_Phase_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Migration_Phase"].ToString())) + 1;
        Responsible_Manager_E.Text = tbl.Rows[0]["Responsible_Manager"].ToString();
        Next_Steps_E.Text = tbl.Rows[0]["Next_steps"].ToString();
        Sign_Off_E.Text = tbl.Rows[0]["Sign_Off"].ToString();
    }
}

看起来您的控件可能已重置为Page_Load事件中的旧值。 通常,填充控件的块包装在if (!IsPostback) { ... }以便仅在页面首次加载时填充它们(即,不是回发)。

因此,就您而言,您将拥有以下优势:

protected void Page_Load(object sender, EventArgs e)
{
    ((Label)Master.FindControl("titleBar")).Text = "More Information";

    if (!IsPostback)
    {
        float ID = float.Parse(Request.QueryString["ID"]);
        DataTable tbl = appsql.appSpecific(ID);
        App_Name_E.Text = tbl.Rows[0]["App_Name"].ToString();
        Description_E.Text = tbl.Rows[0]["Description"].ToString();
        App_Owner_E.Text = tbl.Rows[0]["App_Owner"].ToString();
        CS_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Coexistence_Status"].ToString()));
        CP_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Coexistence_Progress"].ToString()));
        TSO_E.Text = tbl.Rows[0]["TSO"].ToString();
        Migration_Phase_E.SelectedIndex = (Convert.ToInt16(tbl.Rows[0]["Migration_Phase"].ToString())) + 1;
        Responsible_Manager_E.Text = tbl.Rows[0]["Responsible_Manager"].ToString();
        Next_Steps_E.Text = tbl.Rows[0]["Next_steps"].ToString();
        Sign_Off_E.Text = tbl.Rows[0]["Sign_Off"].ToString();
    }
}

这将阻止您的控件每次都在Page_Load上重新初始化,这将使Update_Click方法可以选择新值并正确更新数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM