【问题标题】:Implement check availability functionality on save button在保存按钮上实现检查可用性功能
【发布时间】:2016-09-09 19:22:27
【问题描述】:

我在 aspx 表单中创建了一个链接按钮,用于检查登录电子邮件地址的可用性及其功能。

    protected void lnkCheckAvailable_Click(object sender, EventArgs e)
    {
        SystemUserBL bl = new SystemUserBL(SessionContext.SystemUser);
        ds = new DataSet();
        bl.FetchForLoginEmailAddress(ds, txtLoginEmailAddress.Text);

        if (ds.Tables[0].Rows.Count > 0)
        {
            valDuplicatePassword.Visible = true;
            valDuplicatePassword.Text = "<b>This User Name is already in use by another user.</b>";
        }
        else
         {
            valDuplicatePassword.Visible = true;
            valDuplicatePassword.Text = "<b>Congratulations! " + txtLoginEmailAddress.Text + " is available.</b>";
        }
    }

当用户单击检查可用性链接按钮时,它工作正常。还有另一个按钮“保存”,它将用户信息保存在表中。现在我的问题是,如果它显示“此用户名已被其他用户使用”。消息信息仍然保存在数据库中。请告诉我如何防止这种情况!!!

【问题讨论】:

  • 你为什么把它作为两个独立的动作?用户名可能在您进行“检查可用性”检查时可用,但在您“保存”时可能已被其他人占用。我想不出先单独检查有什么好处。
  • 只需禁用 If 块中的保存按钮。如果您想在保存时检查用户登录电子邮件,正如@Demien_The_Undeliever 所说,您可以在保存操作中进行检查并抛出错误。

标签: c# asp.net


【解决方案1】:

您可以根据数据库中是否存在用户名返回truefalse。您可以创建一个检查用户可用性的方法。

当用户按下保存按钮时,如果方法返回true,则表示用户存在。

private bool CheckUserAvailability()
{
        SystemUserBL bl = new SystemUserBL(SessionContext.SystemUser);
        ds = new DataSet();
        bl.FetchForLoginEmailAddress(ds, txtLoginEmailAddress.Text);

        if (ds.Tables[0].Rows.Count > 0)
        {
            valDuplicatePassword.Visible = true;
            valDuplicatePassword.Text = "<b>This User Name is already in use by another user.</b>";
            return true;
            }
            else
             {
              valDuplicatePassword.Visible = true;
              valDuplicatePassword.Text = "<b>Congratulations! " + txtLoginEmailAddress.Text + " is available.</b>";
              return false;
            }
 }

你也可以在link点击时调用这个方法。

protected void lnkCheckAvailable_Click(object sender, EventArgs e)
{
     CheckUserAvailability();
}

如果用户不存在,您将在Save 按钮上调用此方法,然后将信息保存在数据库中。

protected void Savebtn_Click(object sender, EventArgs e)
{
   if(CheckUserAvailability() == false)
   {
    SaveUserInfoToDataBase();
   }
}

【讨论】:

  • 所有这些预先检查都是没有意义的,正如我所说,如果两个用户都可能同时尝试运行此代码。例如。两个用户都检查可用性 - 是的,它是可用的。两个用户都按“保存”。代码为两个用户运行并确定用户名可用,然后 然后 向前按下并插入两个用户。您必须INSERT 的实际点对数据库进行检查(最好还有一个防止重复的唯一约束),然后大多数预检查将变得毫无意义。
  • @Damien_The_Unbeliever 是的,我完全同意你的观点,但这个答案是在 OP 的上下文中。您已经在 cmets 中指出,您也可以根据需要编辑答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
相关资源
最近更新 更多