【问题标题】:Using same submit to Add and Edit to database values in ASP.NET and C#在 ASP.NET 和 C# 中使用相同的提交来添加和编辑数据库值
【发布时间】:2013-11-11 07:19:31
【问题描述】:

我使用相同的提交按钮来添加新行,并在 ASP.NET 表单中编辑数据库表的行值。我使用CommandArgument 来更改正在应用的方法。

protected void btnSave_Click(object sender, EventArgs e)
    {
       if (!CheckProfileComplete())
        {
            btnSave.CommandArgument = "new";
            btnSave.Text = "Save";
        }
        else
        {
            btnSave.CommandArgument = "update";
            btnSave.Text = "Update";
        }
    }
protected void btnSave_Click(object sender, EventArgs e)
    {
        if (!Page.IsValid)
            return;
        string strCmd = this.btnSave.CommandArgument;
        if (strCmd.ToLower() == "new")
        {
             //Add new Record
        }
        else if(strCmd.ToLower() == "update")
        {
             //Update existing record.
        }
     }

Add New 的情况下,会显示一个空白表单,而在Update 中,会显示一个带有先前添加到数据库表中的数据的表单,用户可以在其中编辑值然后保存它。 CommandArgument 在页面加载时更新,在检查其他一些参数后。

Add New 方法运行良好,但我无法编辑 Update 的值。我的意思是表单发布了在呈现给用户进行编辑之前动态填充的相同值。单击保存(更新模式)按钮后未显示任何更改。即使在值被更改并回发后,表单似乎仍将其先前的状态作为当前状态。

例如,如果 tbName.Text 在最初从数据库读取时具有值 foo

用户编辑了它,现在tbName.Text 在回发之前有bar

但是当表单在调试模式下发布时,tbName.Text 显示 foo 作为当前值,而不是 bar

【问题讨论】:

  • 在更新的情况下,能否请您给我看看 bindData 的代码。您是如何填充控件的。
  • @raman,添加相同的内容会使问题变得很长。我所做的是查询数据库中的记录,并将其存储在数据集中(仅返回 1 行)。现在使用数据集的表 (dt) 我遍历数据行 foreach(DataRow dr in dt.Rows),然后使用 tbName.Text= dr["PName"].ToString() 填充我的控件
  • 当您尝试更新您的值时,您的代码似乎正在重新绑定数据,因此请检查您是否在填充更新值时使用(!IsPostBack),我认为这将在 Page_Load 事件中。
  • @Cyber​​pks 不要担心冗长的问题,请发布您的代码。
  • 我只是想知道您是如何获取您从 db 访问数据所依据的身份列的值的。

标签: c# asp.net forms postback


【解决方案1】:

您需要确定发生了哪个事件,这使您需要更改按钮的工作方式。一旦您知道了这一点,那么在该事件中,您可以取消订阅该按钮并将其订阅到其他内容。

private void OnMyEvent()
{
   button1.Click -= "theEventIDoNotWant";
   btnSave.Click += new EventHandler(theEventIWant);
}

【讨论】:

    【解决方案2】:

    据我所知,它应该像这样工作:

    <asp:LinkButton ID="btnSave" runat="server" CommandArgument="Add" OnCommand="btnSave_Click">Save</asp:LinkButton>
    

    和后面的代码:

    protected void btnSave_Click(object sender, CommandEventArgs e)
    {
        if(string.Equals(e.CommandArgument,"Add"))
            {
                //do save logic here
                btnSave.CommandArgument = "Edit";
                btnSave.Text = "Update";
            }
    
            if (string.Equals(e.CommandArgument, "Edit"))
            {
                //do update logic here
                btnSave.Text = "Update done";
            }   
    }
    

    您只需要实现一个事件处理程序并使用 CommandEventArgs 检查您随事件发送的参数。

    希望对你有所帮助。

    干杯!

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      相关资源
      最近更新 更多