2008-09-30 5 views
4

... 메소드 내부에서 javascript 함수를 호출하려면 어떻게해야합니까? 나는 내부입니다

public class bgchange : IMapServerDropDownBoxAction 
{ 
    void IServerAction.ServerAction(ToolbarItemInfo info) 
    { 
    Some code... 

및 "일부 코드는"내가 원하는 이후

몇 가지 자바 스크립트를 트리거

[WebMethod] 
public static void DoSome() 
{ 

} 

를 트리거합니다. 이것이 가능한가?

여기에서 전환 방법을 확인하십시오. dosome()을 호출 할 수있었습니다. 해고했지만 자바 스크립트를 실행하지 않았다. registerstartupscript 메서드를 사용하려고했지만 구현 방법을 완전히 이해하지 못했습니다. 여기에 내가 시도 내용은 다음과 같습니다

public class bgchange : IMapServerDropDownBoxAction 
{ 

void IServerAction.ServerAction(ToolbarItemInfo info) 
{ 
    ...my C# code to perform on dropdown selection... 
     //now I want to trigger some javascript... 
     // Define the name and type of the client scripts on the page. 
     String csname1 = "PopupScript"; 
     Type cstype = this.GetType(); 

     // Get a ClientScriptManager reference from the Page class. 
     ClientScriptManager cs = Page.ClientScript; 

     // Check to see if the startup script is already registered. 
     if (!cs.IsStartupScriptRegistered(cstype, csname1)) 
     { 
      String cstext1 = "alert('Hello World');"; 
      cs.RegisterStartupScript(cstype, csname1, cstext1, true); 
     } 
} 

}

은 내가 MSDN의 예제에서 registerstartupscript 코드를 얻었다. 분명히 올바르게 구현하고 있지 않습니다. 현재 vs는 "비 정적 필드, 메소드 또는 속성 'System.Web.UI.Page.ClientScript.get'에 대해 객체 참조가 필요합니다. Page.Clientscript;"Page.Clientscript; 코드 조각을 참조합니다.

+0

당신이 무엇을하고 싶어하는지 더 많이 알 수 있습니까? 너 건축 같은거야? 그리고 당신이 고위층에서 공범자가되기를 원하는 것은 무엇입니까? –

+0

DoSome()이 "JavaScript를 트리거하는"이란 무엇을 의미합니까? –

답변

4

나는 완전히 당신이 일의 순서를 이해 확실하지 않다 하려고하는 것, 클라이언트 쪽과 그렇지 않은 것 ...

그러나 웹에 호출하는 시작 자바 스크립트 메서드를 페이지에 추가 할 수 있습니다. 방법. 자바 스크립트를 통해 WebMethod를 호출 할 때 콜백 함수를 추가 할 수 있습니다.이 함수는 WebMethod가 반환 할 때 호출됩니다.

페이지에 ScriptManager 태그를 추가하면 Javascript를 통해 페이지에 정의 된 WebMethods를 호출 할 수 있습니다. 당신이 당신의 WebMethod를 호출을 추가 할 수 있습니다를 Page_Load 함수에서

<asp:ScriptManager ID="scriptManager1" 
    runat="server" EnablePageMethods="true" /> 

..

Page.ClientScript.RegisterStartupScript(
    this.GetType(), 
    "callDoSome", 
    "PageMethods.DoSome(Callback_Function, null)", 
    true); 

Callback_Function가의 WebMethod를 호출 후 실행됩니다 자바 스크립트 함수를 나타냅니다 ...

<script language="javascript" type="text/javascript"> 
    function Callback_Function(result, context) { 
     alert('WebMethod was called'); 
    } 
</script> 

편집 :

Web ADF controls에 대한 링크를 찾았습니다. 이게 네가 사용하는거야 ??

해당 페이지에서 자바 스크립트 콜백을 수행하는 것처럼 보입니다.

public void ServerAction(ToolbarItemInfo info) { 
    string jsfunction = "alert('Hello');"; 
    Map mapctrl = (Map)info.BuddyControls[0]; 
    CallbackResult cr = new CallbackResult(null, null, "javascript", jsfunction); 
    mapctrl.CallbackResults.Add(cr); 
} 
+0

경고는 언제 발사됩니까? 나는 방법이 완료된 후 일어날 필요가있다. 귀하의 예제에서 경고가 발생하면 페이지가로드됩니까? – mrjrdnthms

+0

WebMethod가 호출 된 후 경고가 발생합니다. 이 예제에서 시퀀스는 PageLoad (server) -> PageMethods call (javascript) -> DoSome WebMethod (server) -> Callback_Function (javascript)로 진행됩니다. –

+0

당신은 최고입니다! 웹 ADF 컨트롤은 내가 사용하고있는 코드였으며 코드는 매력처럼 작동했습니다. 당신은 그 이상으로 나아갔습니다. 나는 너 같은 사람들 때문에 스택 오버플 어를 좋아한다! – mrjrdnthms

1

는 흠 ... 문제는

지금 내가 대답은 전혀 생각하지 않는다. 내 원래의 대답은 이후 극적으로 변화.하지만 내가 잘못 될 수 있습니다.

2

브라우저에서 브라우저의 메소드를 서버에서 직접 호출 할 수 없습니다. 그러나 브라우저에서 메소드를 실행할 응답에 javascript 함수를 추가 할 수 있습니다.하여 위의 경우

string script = "<script language='javascript'>\n"; 
script += "javascriptFunctionHere();\n"; 
script += "</script>"; 

Page.RegisterStartupScript("ForceClientToCallServerMethod", script); 

More info here

+0

쓰레기. 지원되지 않습니다. – Will

+0

예, 그것을 넣을 때 전체 Page.RegisterStartupScript 줄 밑줄을 긋고 "비 정적 필드, 메서드 또는 속성 'System.Web.UI.Page.RegisterStartupScript'에 대한 개체 참조가 필요합니다 ... – mrjrdnthms

3

다음 않는 ServerAction 방법 내에서

, 당신은 RegisterStartupScript를 호출하는 방법을 당신이에 대한 참조를 가지고 있지 않기 때문에, 그것은 작동하지 않습니다이다 " 페이지 "개체.

예제에서 bgchange는 IMapServerDropDownBoxAction이 인터페이스라고 가정합니다. 즉, 참조 할 페이지 인스턴스가 없음을 의미합니다.

페이지가 유효한 참조이기 때문에이 작업은 Asp.Net 페이지 또는 UserControl에서 똑같이 작동합니다.

+0

그래서 어떻게이 내 드롭 다운 코드를 통합 할 것이라고? – mrjrdnthms

관련 문제