0

Here is my messageview.aspx, which has list view to show user messages. On delete button click, I want to capture the current table row value, and call the sql stored procedure accordingly. However, I am unable to access the fields like Sender Email-ID, Sender Role, and Message inside delete button click function. how can I do so?

<%@ 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>

The code behind message view is

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

Here is the screen shot -

enter image description here

2 Answers 2

1

What you can probably do is get the NamingContainer of your delete button and find the other controls within it.

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;
}
Sign up to request clarification or add additional context in comments.

Comments

1

You can do something like the answer for this question.

But remember to validate the value (with int.TryParse(string) for example).

<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
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.