2011-01-28 4 views
2

aspx 페이지 1 개와 웹 사용자 컨트롤 1 개가있는 aspx 웹 응용 프로그램이 있습니다. 나는 aspx 페이지에 4 개의 사용자 컨트롤 인스턴스를 추가했다. 사용자 정의 컨트롤에는 aspx 페이지에서 컨트롤을 제거하는 데 사용되는 제거 단추가 있습니다. 사용자 정의 컨트롤의 제거 단추를 클릭하면 어떻게하면 aspx 페이지에서 어떤 사용자 정의 컨트롤의 제거 단추를 클릭했는지 확인할 수 있습니다. 이 클라이언트 측을하려는 경우이 같은 ID를 참조 할 수 있습니다 사전에aspx 페이지에서 사용자 정의 컨트롤의 ID를 찾는 방법

감사합니다 :)

답변

1

... 내가 해결책을 알려 주시기 바랍니다 :

var removeButtonId = "<%=removeButton.ClientID %>"; 

당신이 클릭 이벤트를 유선 한 경우

그렇게처럼 sender 매개 변수에서 얻을 수 있습니다 :

void removeButton_Click(object sender, EventArgs e) 
{ 
    Button removeButton = sender as Button; 
    string id = removeButton.ID; 
} 
+0

코드 비헤이비어에서이 작업을 수행하고 있으며 aspx 페이지에서 동일한 사용자 컨트롤이 4 개 이상 있습니다. – asd

+0

내 대답을 업데이트했습니다. – hunter

+0

Id는 Button ID를 반환하지만 usercontrol 인스턴스의 ID를 가져와야합니다. (어떤 사용자 컨트롤 인스턴스의 단추가 기본 페이지에서 클릭되었는지 알고 있어야합니다.) – asd

0

쉬운 방법 : 사용자 정의 컨트롤에 RemoveClicked 이벤트를 구현하게하십시오. 그런 다음 삭제 단추를 클릭하면 단추 클릭 이벤트 처리기에서 RemoveClicked 이벤트를 발생시킵니다. 페이지는 제거 요청이 발생한 사용자 제어를 알 수 있습니다. 원하는 경우 이벤트 args를 통해 버튼을 전달할 수도 있습니다. 이 페이지는 FYI의 4 가지 사용자 컨트롤 모두에 대해이 이벤트에 첨부해야합니다.

이 조언은 귀하가 클라이언트 측 솔루션이 아니라 서버 측 솔루션을 찾고 있다고 가정합니다.

HTH.

6

사용자 정의 컨트롤에 이벤트를 추가하고 해당 이벤트를 코드 뒤에 캡처합니다. 다음 예는 다음과 같습니다

Default.aspx를 웹 형태 :

은 사용자 컨트롤 등록 : 위의 컨트롤의

<%@ Register TagPrefix="so" TagName="UserControl" Src="~/WebUserControl.ascx" %> 

4 인스턴스. 우리는 아래에 정의 된 OnRemoving 이벤트를 처리하고 주 :

<so:UserControl ID="UserControl1" runat="server" Title="Control 1" OnRemoving="UserControl1_Removing" /> 
    <so:UserControl ID="UserControl2" runat="server" Title="Control 2" OnRemoving="UserControl2_Removing" /> 
    <so:UserControl ID="UserControl3" runat="server" Title="Control 3" OnRemoving="UserControl3_Removing" /> 
    <so:UserControl ID="UserControl4" runat="server" Title="Control 4" OnRemoving="UserControl4_Removing" /> 

기본입니다.영문 코드 뒤에 :

웹 사용자 컨트롤이 "제거"를 포함 :

protected void UserControl1_Removing(object sender, EventArgs e) 
{ 
    WebUserControl ctrl = (WebUserControl)sender; 
    ctrl.Visible = false; 
} 
protected void UserControl2_Removing(object sender, EventArgs e) 
{ 
    WebUserControl ctrl = (WebUserControl)sender; 
    ctrl.Visible = false; 
} 
protected void UserControl3_Removing(object sender, EventArgs e) 
{ 
    WebUserControl ctrl = (WebUserControl)sender; 
    ctrl.Visible = false; 
} 
protected void UserControl4_Removing(object sender, EventArgs e) 
{ 
    WebUserControl ctrl = (WebUserControl)sender; 
    ctrl.Visible = false; 
} 

사용자 제어 웹 형태 : 뒤에 코드에서

, 나는 컨트롤의 OnRemoving의 각 이벤트를 처리 버튼 :

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %> 

<fieldset> 
    <legend><%=Title %></legend> 
    <asp:Button ID="Button_Remove" runat="server" Text="Remove" OnClick="Button_Remove_Click" /> 
</fieldset> 

사용자 컨트롤 코드 뒤에 :

마지막으로, 여기에 사용자 컨트롤에 대한 이벤트를 코딩하는 방법은 다음과 같습니다

public partial class WebUserControl : System.Web.UI.UserControl 
{ 
    // the event delegates may listen for 
    public event EventHandler Removing; 
    public string Title { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void Button_Remove_Click(object sender, EventArgs e) 
    { 
     // raise the event for attached delegates 
     if (Removing != null) 
      Removing(this, EventArgs.Empty); 
    } 
} 

최종 결과 :

위의 예는 다음 웹 페이지를 생성합니다. 제거 버튼을 클릭하면, 해당 컨트롤이 사라집니다 :

Final product

행운을 빕니다!

+0

매우 철저한 응답 –

관련 문제