이 문제를 광범위하게 검색했지만 내 문제의 해결책을 찾을 수 없습니다. 해당 페이지의 사용자 정의 컨트롤에서 페이지의 코드 뒤에 함수를 호출하려고합니다.이벤트 처리기는 항상 null입니다.
마스터 페이지를 사용하는 웹 응용 프로그램이 있습니다. 내가 콘텐츠 페이지 중 하나에 쓴 사용자 정의 컨트롤을 추가하고 있습니다. 도구 상자에서 끌어서 놓아서 aspx 페이지에 사용자 정의 컨트롤을 추가했습니다. 뒤에있는 코드에서 사용자 정의 컨트롤을 볼 수 있지만 공용 함수에 액세스 할 수 없습니다. 이 문제를 해결하기 위해 코드 뒤에서 사용자 정의 컨트롤의 개체를 만들고 LoadControl 함수를 사용했습니다. 그것들 모두 잘 작동하는 것 같습니다.
내가 겪고있는 문제는 aspx 페이지에서 사용자 정의 컨트롤로 EventHandler를 연결하려고 할 때입니다. 모든 것이 컴파일되고 실행되지만 페이지에서 아무 것도 보이지 않습니다. 문제는 EventHandler가 항상 null이라는 것입니다.
사용자 컨트롤 코드public partial class ucBuyerList : System.Web.UI.UserControl
{
public delegate void BuyerSelectedEventHandler(object sender, EventArgs e);
public event BuyerSelectedEventHandler BuyerSelected;
private string name = "";
public string Name
{
get { return name; }
set { name = value; }
}
private string auid = "";
public string AUID
{
get { return auid; }
set { auid = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
}
private void OnBuyerSelected(EventArgs e)
{
if (BuyerSelected != null)
{
BuyerSelected(this, new EventArgs());
}
}
protected void lbBuyerList_SelectedIndexChanged(object sender, EventArgs e)
{
SetNameAndAUID();
OnBuyerSelected(e);
}
private void SetNameAndAUID()
{
name = lbBuyerList.SelectedItem.Text;
auid = lbBuyerList.SelectedItem.Value;
}
}
상위 페이지 코드
public partial class frmBuyerInformation : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Master.changePageTitle("Buyer Information");
buyerList.BuyerSelected += new ucBuyerList.BuyerSelectedEventHandler(buyerListControl_BuyerSelected);
}
void buyerListControl_BuyerSelected(object sender, EventArgs e)
{
DisplayBuyerInformation();
}
public void DisplayBuyerInformation()
{
tbName.Text = buyerList.Name;
tbAUID.Text = buyerList.AUID;
}
}
사람이 내가 뭘 잘못 볼 수 있을까요?
편집 :이 문제는 해결되었습니다. 위의 코드 스 니펫이 이제는 작동합니다. 누구든지 내가 가진 문제에 부딪히면 위 코드를 모델링 할 수 있습니다. aspx 및 ascx 페이지 모두에 AutoEventWireup="true"
이 있는지 확인하십시오. 백포도주 솔루션에 감사드립니다. Diego De Vita에게도 감사드립니다.
if (BuyerSelected! = null) {BuyerSelected (this, e); }'절대하지 마! 이 코드는 경쟁 조건을 만듭니다. 이것은 적절한 숙어입니다 :'var h = BuyerSelected; (h! = null) h (this, e);' – cdhowie
몇 초 전에 다른 것을 썼습니다 .. 실제로 .. 당신의 의견을 보았고 동의하지 않을 수도 있습니다. 나는 항상 이벤트 클래스를 그런 식으로 시작했다. 즉, 이벤트에 첨부 된 이벤트 핸들러를 호출합니다. 지금 나는 그 질문을주의 깊게 읽지 않았으므로 나는 대답이 없다. 그냥 당신의 마지막 코멘트가 올바르지 않다는 것을 말합니다 –
asp.net 컨트롤에서 lbBuyerList_SelectedIndexChanged를 그러한 이벤트의 처리기로 지정하면 ascx에서 선언적으로 적절한 태그 속성을 수정했는지 궁금합니다. 각 단계 (해당 메서드 본문에서 시작)에서 중단 점을 사용하고 해당 코드가 호출되면 디버그 중에 발견 할 수 있습니다. –