2017-03-11 124 views
0

這是我的messageview.aspx,它有列表視圖來顯示用戶消息。 在刪除按鈕單擊時,我想要捕獲當前表的行值,並相應地調用sql存儲過程。但是,我無法訪問諸如發件人電子郵件ID,發件人角色和消息內部刪除按鈕點擊功能等字段。我怎麼能這樣做?如何刪除ASP.NET C#中的特定列表視圖項目?

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

這裏是屏幕截圖 -

enter image description here

回答

1

什麼你也許可以做的就是讓你的刪除按鈕的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; 
} 
1

你可以做一些類似this問題的答案。

但請記住驗證該值(例如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 
} 
相關問題