오랜 질문이 있습니다. 나는 ASP.NET에 상당히 익숙하다. 그래서 나와 함께 견뎌야한다. 몇 가지 옵션이 나열된 ASP.NET 페이지에 대한 컨트롤을 만들었습니다. 각 옵션에는 클릭 가능한 영역이 두 개 있습니다 (간단히하기 위해 버튼이라고 부름). 하나는 옵션을 선택하고 하나는 옵션을 숨 깁니다.ASP.NET 여러 인수가있는 서버 쪽 이벤트 트리거
protected void Page_Load(object sender, EventArgs e)
{
RenderOptions();
}
public void RenderOptions()
{
for (int i = 0; i < 5; i++) {
HtmlGenericControl div1 = new HtmlGenericControl("div");
div1.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(this, "option" + i));
m_TreeContainer.Controls.Add(div1);
HtmlGenericControl div2 = new HtmlGenericControl("div");
div2.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(this, "option" + i));
m_TreeContainer.Controls.Add(div2);
}
}
public void RaisePostBackEvent(string arg)
{
//do something
}
잘 작동합니다 (IPostBackEventHandler 인터페이스 구현). 여기서 문제는 어떤 HTML 요소가 클릭되었고 RaisePostBackEvent 메서드에서 어떤 작업을 수행해야 하는지를 찾는 방법이없는 것 같습니다.
class HtmlDivControl : HtmlGenericControl, IPostBackEventHandler
{
#region Delegates
public delegate void ClickEventHandler(object sender, string eventArgument);
#endregion
#region Properties
private ClickEventHandler m_Click;
public ClickEventHandler Click
{
get { return m_Click; }
set { m_Click = value; }
}
#endregion
#region Constructors
public HtmlDivControl()
{
}
#endregion
public void RaisePostBackEvent(string eventArgument)
{
m_Click.Invoke(this, eventArgument);
}
}
가 지금은 div1을 만들어 HtmlGenericControl보다는 내 HtmlDivControl을 DIV2, 방법에 클릭하여 속성을 설정 (대표 : 내가해야 할 노력은 무엇
은 다음과 같습니다 새로운 클래스를 (HtmlDivControl) 만드는 것입니다) div (div1 또는 div2) 자체를 GetPostBackEventReference 메서드의 컨트롤로 전달했습니다. 이번에는 div를 구별 할 수있을뿐만 아니라 수행해야 할 작업을 미리 결정할 수있었습니다. 그러나 컨트롤에 대한 RaisePostBackEvent는 PageLoad 후에 호출됩니다. 그래서 지금 문제는 이벤트가 처리되기 전에 전체 옵션 컨트롤이 렌더링된다는 점입니다. 따라서 실제 숨기기가 렌더링 이후에 발생하기 때문에 숨겨져 있어야하는 옵션이 아닙니다. RenderOptions() 호출을 PageLoadComplete 메서드로 이동해도 div 컨트롤이 아직 존재하지 않기 때문에 어느 쪽도 도움이되지 않습니다.
저는 꽤 근본적인 것이 빠져 있다고 확신합니다. 하지만 누군가 내가 어떻게 이런 식으로 접근해야하는지 설명해 주시겠습니까?
p.s. 여기에 밑줄을 쓰려면 어떻게해야합니까? 텍스트를 이탤릭체로 만드는 데 사용됩니까? 이스케이프 문자가 있습니까?
정확히이 컨트롤로 무엇을하려합니까? 내 충고는 ASP.Net을 처음 접한다면 사용자 지정 컨트롤 클래스에서 벗어나는 것입니다. – John
Page_Load는 Microsoft가 내놓은 무언가입니다 :-) 또한, 그 이유는 mangle을 매우 유효한 문자의 사용. 그러나 이것은 완전히 다른 토론입니다. @ 존 : 사용자 지정 컨트롤을 사용하지 않으려면 ASP.NET의 복잡한 측면을 어떻게 배우려고합니까? 명확히하기 위해 ASP.NET이나 프로그래밍 전반에 대한 첫 발걸음을 내디뎠다 고 생각하지 않습니다. 이제는 완전히 익숙하지 않은 영역에 들어가기 시작했습니다. 내가 게시 한 것을 바탕으로 볼 때 나는 잘못된 방향으로 이것을 가져갈 것입니다. 그렇다면 올바른 방법을 가르쳐주십시오. – Jerry
필자가 언급 한 이유는 다른 프로젝트에서이 컨트롤을 다시 사용하지 않는다면 거의 항상 컨트롤이 내장 된 더 간단하고 세련된 솔루션이 있거나 최소한 UserControl을 만드는 것입니다 – John