2017-03-11 20 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); 
     } 
    } 
} 

をです - あなたは、おそらく行うことができますが、あなたの削除ボタンのNamingContainerを取得し、発見され

enter image description here

答えて

1

その中の他のコントロール。

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 
} 
関連する問題