c# – 如何在gridview中使用LinkBut​​ton删除代码隐藏文件中的选定用户名?

我的“JobPost.mdf”中有一个“UserDetail”表.
我有一个“Gridview1”显示“UserDetail”表中的列,其中有一个主键“UserName”.
此“UserName”最初使用Membership类功能保存.
现在我向GridView1添加一个“删除”链接按钮.这个“删除”不是自动生成按钮,我在ToolBox中拖动了列itemtemplate.
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(对象发送者,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();


     }

请帮忙!

解决方法:

要进行确认,您应该将脚本添加到LinkBut​​ton的OnClientClick属性:

<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();
}

OnClientClick属性将您写入的JavaScript添加到呈现的< a />的onclick属性的开始位置.标签.因此,如果用户未确认删除,则将返回false并且不执行任何操作.否则,它将执行回发删除.

在事件处理程序中,发件人始终是发起事件的控件.在这种情况下,LinkBut​​ton.因此,您可以将其强制转换为LinkBut​​ton并获取其CommandArgument属性,其中tye是UserName.

上一篇:C#动态创建的LinkBut​​ton命令事件处理程序


下一篇:javascript – 使用Google Analytics时,ASP.NET页面上的回发失败