4

我的“JobPost.mdf”中有一个“UserDetail”表。我有一个“Gridview1”,显示“UserDetail”表中的列,该表有一个主键“UserName”。这个“用户名”最初是使用 Membership 类函数保存的。现在我向 GridView1 添加一个“删除”链接按钮。这个“删除”不是自动生成按钮,我从工具箱中拖到列项模板内。GridView1 的列现在变为“Delete_LinkBut​​ton”+“UserName”(在 UserDetail 表内)+“City”(在 UserDetail 表内)+“IsAdmin”(在 UserDetail 表内)

我需要的是,通过单击此“delete_linkBut​​ton”,它只会从“UserDetail”表中删除同一行上的整个用户实体(通过相应的“UserName”链接),并从 AspNetDB 中删除所有信息。 mdf(用户、会员、UserInRole 等)。

我想启动用户确认,但不是强制性的。至少我正试图以正确的方式使其发挥作用。

for example:

Command     UserName    City           IsAdmin
delete           ken       Los Angles          TRUE
delete           jim        Toronto        FALSE

当我点击第一行的“删除”时,我需要删除“UserDetail”表中关于“ken”的所有记录。同时,AspNetDB.mdf 中关于“ken”的所有记录都将消失,包括 UserinRole 表。

我是 asp.net 的新手,所以我不知道如何将“Delete_LinkBut​​ton”的命令参数传递给代码隐藏文件 LinkBut​​ton1_Click(object sender, EventArgs e),因为我需要一个额外的参数“UserName”。

我的部分代码如下:

<asp:TemplateField>
                 <ItemTemplate>
                     <asp:LinkButton ID="Delete_LinkButton" runat="server" onclick="LinkButton1_Click1" CommandArgument='<%# Eval("UserName","{0}") %>'>LinkButton</asp:LinkButton>
                 </ItemTemplate>
             </asp:TemplateField>


protected void Delete_LinkButton_Click(object sender, EventArgs e)
     {
      ((LinkButton) GridView1.FindControl("Delete_LinkButton")).Attributes.Add("onclick", "'return confirm('Are you sure you want to delete {0} '" + UserName);
      Membership.DeleteUser(UserName);
      JobPostDataContext db = new JobPostDataContext();
      var query = from u in db.UserDetails
                   where u.UserName == UserName
                   select u;
         for (var Item in query)
         {
              db.UserDetails.DeleteOnSubmit(Item);
         }
      db.SubmitChanges();


     }

请帮忙!

4

1 回答 1

1

对于确认,您应该将脚本添加到OnClientClickLinkBut​​ton 的属性中:

<asp:LinkButton 
    ID="Delete_LinkButton" 
    runat="server" 
    onclick="LinkButton1_Click1" 
    CommandArgument='<%# Eval("UserName","{0}") %>'
    OnClientClick='if (!confirm("Are you sure you want to delete <%# Eval("UserName","{0}") %>?")) return false;'
>
    LinkButton
</asp:LinkButton>

该按钮的事件处理程序应该是:

protected void Delete_LinkButton_Click(object sender, EventArgs e)
{
    string userName = ((LinkButton)sender).CommandArgument.ToString();

    Membership.DeleteUser(UserName);
    JobPostDataContext db = new JobPostDataContext();

     foreach (var item in db.UserDetails.Where(u => u.UserName == userName))
          db.UserDetails.DeleteOnSubmit(Item);

    db.SubmitChanges();
}

该属性将您写入的 JavaScript 添加到呈现标记OnClientClick的 onclick 属性的开头。<a/>因此,如果用户不确认删除,它将返回 false 并且什么也不做。否则,它将执行回发以删除。

在事件处理程序中,sender始终是发起事件的控件。在这种情况下,LinkButton. 因此,您可以将其投射到tye 所在的位置LinkButton并获取其属性。CommandArgumentUserName

于 2011-08-26T13:24:16.277 回答