2010-02-18 6 views
0

여기에 이상한 동작이 있습니다.Dotnetnuke의 ParseControl ASP.NET에서 onclick을 C# 메서드 대신 javascript로 변경했습니다. 이상한 동작

<asp:LinkButton ID="LinkButton2" runat="server" OnClick="LoadPromo" Text="Get your Free 2" /> 

내가 이벤트를 추가 할 때이 그것을 변경 : 나는 몇 ASP.NET 링크 버튼에 일부 HTML은이 컨트롤을 필요 지금

String mstring = sw.ToString(); 
var myctrl = Page.ParseControl(mstring); 

     foreach (Control Control in myctrl.Controls) 
       { 
        if (Control is LinkButton) 
         { 
         LinkButton lb = (LinkButton)Control; 
         lb.OnClientClick = "LoadPromo"; 

         } 
          Panel1.Controls.Add(myctrl); 
       } 

    protected void LoadPromo(object sender, EventArgs e) 
     { 
      Console.Write(e.ToString()); 

     } 

컨트롤을 생성 일부 XSLT를

<a onclick="LoadPromo;" id="dnn_ctr954_ViewPromotions_LinkButton2" href=" WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr954$ViewPromotions$LinkButton2", "", true, "", "", false, true))">Get your Free 2 a> 

이제 보시다시피 asp.net 컨트롤 대신 javascript가 onclick으로 바뀝니다. "LoadPromo"를 "LoadPromo;"로 변경합니다. 이 문제를 해결하려면 어떻게해야합니까? 내가 시도 것들 사전

에서

감사합니다 :

<a id="dnn_ctr954_ViewPromotions_LinkButton2" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;dnn$ctr954$ViewPromotions$LinkButton2&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Get your Free 2</a> 

답변

3

OnClientClick 결국에 렌더링하는 서버 컨트롤의 속성의 이름입니다

lb.Click += LoadPromo; 

나는이 출력을 얻을 "onclick"속성. 이것은 클라이언트 측에서 javascript 함수를 호출하기위한 것입니다. 그래서이 경우에는 괜찮아 보입니다.

OnClick 속성의 경우 해당 Page.aspx의 서버 쪽 함수 이름과 일치해야합니다. 나는 왜 이것이 onclick 속성을 렌더링하는지조차 확신하지 못합니다. 아마도 올바른 서명을 가진 "LoadPromo"라는 함수가 없을 것입니다. 너무이 시도

myLinkButton.Click += LoadPromo; 
+0

을 수행하여

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

그런 다음 당신이 당신의 버튼이를 연결할 수 있으며 작업을 doesxn't :

는이 같은 C#을 방법이 있어야합니다. ID = "dnn_ctr954_ViewPromotions_LinkButton2"HREF = "자바 스크립트 : WebForm_DoPostBackWithOptions (새 WebForm_PostBackOptions ($ true로 ctr954 $ ViewPromotions $ LinkButton2 ", " ", DNN ", " ", " ", 허위 사실 나는이를 얻을 때)) "> 무료로 받으십시오. 2 –

+1

예, 그렇게해야합니다. WebForm_DoPostBackWithOptions()는 코드 숨김에서 LoadPromo()를 실행할 포스트 백을 야기시키는 javascript 함수입니다. – jrummell

+0

또한 게시물에 다시 적용해야하며 고정 된 문제 : if (Page.IsPostBack ||! Page.IsPostBack) –