繁体   English   中英

如何在ASP.NET C#中删除特定的listview项目?

[英]How to delete specific listview items in ASP.NET C#?

这是我的messageview.aspx,它具有显示用户消息的列表视图。 单击删除按钮后,我想捕获当前表的行值,并相应地调用sql存储过程。 但是,我无法访问“发件人电子邮件ID”,“发件人角色”和“删除按钮单击功能”内的消息之类的字段。 我该怎么办?

<%@ Page Title="" Language="C#" MasterPageFile="~/DefaultLayout.Master" AutoEventWireup="true" CodeBehind="MessageView.aspx.cs" Inherits="SchoolMgmtSystem.MessageView" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

      <div class="jumbotron">
            <h1>Inbox</h1>
      </div>          

        <asp:ListView ID="lvgetMessages" runat="server" OnSelectedIndexChanged="lvgetMessages_SelectedIndexChanged">


            <EmptyDataTemplate>
                <table runat="server" style="background-color: #FFFFFF; border-collapse: collapse; border-color: #999999; border-style: none; border-width: 1px;">
                    <tr>
                        <td>No data was returned.</td>
                    </tr>
                </table>
            </EmptyDataTemplate>

            <LayoutTemplate>
                <table class="table table-border">
                    <tr>
                        <th> Sender Email ID</th>
                        <th> Sender Role </th>
                        <th> Message</th>
                    </tr>
                    <tr id="itemPlaceholder" runat="server">
                    </tr>
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                <tr style="background-color: #DCDCDC; color: #000000;">

                    <td>
                        <asp:Label ID="emailIDLabel" runat="server" Text='<%# Eval("[SenderEmailID]") %>' />

                    </td>

                    <td>
                        <asp:Label ID="SenderRoleLabel" runat="server" Text='<%# Eval("RoleName") %>' />
                    </td>

                    <td>
                        <asp:Label ID="MessageLabel" runat="server" Text='<%# Eval("[Message]") %>' />
                    </td>

                     <td>   
                         <asp:Button ID="ButtonDelete" runat="server" Text="Delete" onclick="ButtonDelete_Click" UseSubmitBehavior="False" />
                    </td>

                </tr>
            </ItemTemplate>

        </asp:ListView>

          <div class="form-group" runat="server" style="display:block">
            <asp:Button ID="ButtonBack" runat="server" Text="Back" CssClass="btn-primary center-block" OnClick="ButtonBack_Click" />
        </div>
</asp:Content>

消息视图背后的代码是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BAL;
using System.Data;

namespace SchoolMgmtSystem
{
    public partial class MessageView : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lvgetMessages.DataSource = null;
            lvgetMessages.DataBind();
            String roleId = Request.QueryString["RoleId"];
            String userId = Request.QueryString["UserId"];
            String userEmailId = AdminBizz.GetEmailId(userId, roleId);

            DataTable dtMessageInfo = RoleBizz.GetUserMessages(userEmailId);

            if (dtMessageInfo.Rows.Count > 0)
            {
                lvgetMessages.DataSource = dtMessageInfo;
                lvgetMessages.DataBind();
            }
        }

        protected void lvgetMessages_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void ButtonDelete_Click(object sender, EventArgs e)
        {

        }

        protected void ButtonBack_Click(object sender, EventArgs e)
        {
            String roleId = Request.QueryString["RoleId"];
            String userId = Request.QueryString["UserId"];
            Response.Redirect("MessageSend.aspx?UserId=" + userId + "&RoleId=" + roleId);
        }
    }
}

这是屏幕截图-

在此处输入图片说明

您可能可以做的就是获取删除按钮的NamingContainer并在其中找到其他控件。

protected void ButtonDelete_Click(object sender, EventArgs e)
{
    var control = (Control)sender;
    var container = control.NamingContainer;
    // access your controls this way
    var emailIDLabel= container.FindControl("emailIDLabel") as Label;
    var senderRoleLabel = container.FindControl("SenderRoleLabel") as Label;
    var messageLabel = container.FindControl("MessageLabel") as Label;
}

您可以执行类似问题的答案的操作。

但是请记住验证值(例如,使用int.TryParse(string) )。

<asp:Button ID="ButtonDelete" runat="server" Text="Delete"
    OnClick="ButtonDelete_Click" 
    UseSubmitBehavior="False" 
    CommandName="Deleterecord" 
    CommandArgument='<%# Eval("[SenderEmailID]") %>'/>
protected void ButtonDelete_Click(object sender, EventArgs e)
{
    int id;
    var button = (Button)sender;
    if(!int.TryParse(button.CommandArgument, out id))
    {
        // log.Write("possible sql injection");
        return;
    }

    //  do what you want
}

暂无
暂无

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

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