2009-08-12 5 views
1

내 문제는 클라이언트에서 동적으로 생성 된 html/javascript에서 서버 쪽 이벤트 (예 : DeleteClicked)를 호출하는 것과 관련이 있습니다. 나는 .net에 깊이 뿌리 내린 내 웹 사이트에 기존 페이지가있다. 페이지 라이프 사이클은 꽤 복잡하고 페이지에서 해고 될 수있는 수십 가지 이벤트가 있습니다.동적으로 추가 된 클라이언트 스크립트/HTML 서버 쪽 이벤트 호출

페이지가 이미로드 된 후 일부 JQuery 기능을 활용하고 추가 링크와 버튼을 추가하기를 원합니다. 예를 들어 특정 이미지 위에 작은 마우스 오버 그래픽을 표시하려고합니다. 작은 마우스 오버 그래픽은 삭제, 편집 등과 같은 기능을 제공합니다. 전체 클라이언트 페이지주기를 스레 싱 (또는 우회)하지 않고도 클라이언트 쪽 생성에 대한 클릭 이벤트를 서버 쪽 이벤트에 연결하고 싶습니다.

지금까지 내가 생각할 수있는 유일한 해결책은 페이지 전체에 숨겨진 asp.net 컨트롤을 삽입하는 것입니다. 클라이언트 측 코드는 숨겨진 컨트롤에서 수동으로 클릭()을 강제합니다. 불행히도 나는 이것이 내가 페이지를로드 할 때 불려야 할 모든 이벤트를 반드시 알 필요가 없기 때문에 이것이 받아 들일 수 있다고 생각하지 않는다. 나는 또한 꼭 필요한 것은 아닌 마크 업을 고객에게 보내는 팬이 아니다.

제 질문에 의미가 있습니까? 어떤 도움이라도 대단히 감사하겠습니다!

답변

0

열어 본 낡은 질문에 대한 정리를하고 있습니다. 가장 좋은 해결책은 ASP.NET MVC입니다. 이러한 종류의 작업에 훨씬 좋은 프레임 워크입니다! 웹 양식을 사용하도록 강요받은 사람들에게는 더 좋은 해결책이 없습니다. 새로운 것을 시도 할 수있는 사람들에게는 MVC를 강력히 제안합니다!

0

숨겨진 제어 경로로 이동하여 특정로드에서 호출해야 할 수도있는 모든 이벤트를 알지 못하는 경우 필요할 수있는 모든 숨겨진 버튼을로드해야합니다. 그런 식으로 서버에 다시 게시 할 수있는 제어 권한을 항상 확보해야합니다.

매개 변수를 검사하여 수행해야하는 것을 볼 수있는 '클릭'컨트롤러가 하나있을 수도 있지만 상당히 까다 롭습니다.

자바 스크립트에서 비동기 적으로 호출 할 수있는 서버 측 코드에서 웹 메소드를 노출 할 수 있습니다. 이렇게하면 컨트롤에서 이벤트 처리기를 사용하지 않고도 작업을 수행 할 수 있습니다. 예를 들어

:

/// <summary> 
    /// Deletes the 'something'. 
    /// </summary> 
    /// <param name="id">The unique id of the 'something' to delete.</param> 
    [WebMethod(true)] 
    public void DeleteSomething(string id) { 
     //Insert business logic 
    } 

는 웹 메쏘드로 봐 (또는 AJAX 다른 언급이), 그리고 난 당신이 솔루션을 맞는 찾을 수 있습니다 생각합니다.

+0

WebMethod를 사용할 때의 문제점은 내 페이지가 바인딩되는 기본 데이터를 변경할 수 있다는 것입니다. 그런 다음 다른 AJAX가 호출되고 WebMethod에 충돌 한 후 asp.net 컨트롤에서 이벤트를 발생 시키면 해당 컨트롤이 더 이상 존재하지 않을 수 있기 때문에 이벤트가 유효하지 않을 수 있습니다. 역동적 인 html/javascript가 일반 페이지 수명주기를 사용하는 방법이 필요합니다. WebMethod는 "실제 AJAX"이며 페이지 수명주기를 우회합니다. – jakejgordon

+0

'onsuccess'자바 스크립트 핸들러를 웹 메소드 호출에 연결하면 웹 메소드를 통해 이벤트가 성공적으로 완료된 후에 javascript/jquery를 사용하여 컨트롤을 업데이트 할 수 있습니다. 호출이 실패하면 필요한 모든 정리를 수행 할 수 있도록 실패한 javascript 핸들러를 연결할 수도 있습니다. –

+0

이것은 점점 뜨거워 질 것입니다. 내가 볼 수있는 유일한 명백한 문제는 기본적으로 WebMethod 작업을 수행하는 서버와 우리가 기본적으로 수행해야하는 onsuccess 중 하나를 처리하기 위해 서버에 2 개의 요청을 수행해야한다는 것입니다. 페이지 (또는 적절한 업데이트 패널)를 다시로드하십시오. – jakejgordon

1

정말로 이것을 포용하려면 약간 다른 방식으로 살펴야합니다. 은 "삭제"를 수행

  1. 모든 논리는 귀하의 ASPX 페이지가 가 그 지금
  2. 발생하는 곳마다 그 클래스는 삭제 수행하기 위해 호출 할 수 있습니다
  3. 다시 사용할 수있는 클래스에 있어야합니다
  4. jQuery는 AJAX 요청을 사용하여 웹 서비스 을 호출 할 수 있으며 웹 서비스는 귀하의 ASPX 페이지와 동일한 클래스 을 참조 할 수 있습니다.

이렇게하면 코드를 다시 사용할 수있을뿐만 아니라 UI를 사용하지 않고도 코드를 테스트 할 수 있습니다.

+0

나는 삭제 논리를 분해하고 WebMethods 사용법을 알고 있습니다. 그러나 이것이 제 문제를 해결할 것이라고는 생각하지 않습니다. 이것은 내 대답을 다른 대답으로 복사 한 것입니다. WebMethods를 사용할 때의 문제점은 내 페이지가 바인딩 된 기본 데이터를 변경할 수 있다는 것입니다. 그럼 내가 ASP에서 이벤트를 발사하면.net 컨트롤 (다른 AJAX 호출 후 WebMethod 호출) 컨트롤이 더 이상 존재하지 않을 수 있기 때문에 이벤트가 유효하지 않을 수 있습니다. 역동적 인 html/javascript가 일반 페이지 수명주기를 사용하는 방법이 필요합니다. WebMethod는 "실제 AJAX"이며 페이지 수명주기를 우회합니다. – jakejgordon

1

jQuery가 더 가볍고 (그리고 더 섹시한) 솔루션이 될 수 있지만, 페이지에서 약간의 두드림에 대해 생각해 보셨습니까? UpdatePanels? 이상적인 것은 아니지만 너무 많은 추가 코딩 작업없이 기존 양식에 아약스 기능을 추가하는 것은 비교적 쉽지 않습니다.

마음을 jQuery에 설정하면 WebMethod route을 사용하여 단일 페이지 내에 모든 기능을 유지하거나 jQuery가 특정 작업을 수행하도록 호출하는 새로운 .aspx 페이지를 만들 수 있습니다 (예 : 연락처를 포함하고있는 사이드 바, 이것은 새로운 Ajax/Contacts.aspx 페이지로 옮겨 질 수 있고, jQuery 호출을 통해 편집 할 수있다).

+0

저는 우리가 추가하는 기능이 업데이트 패널에 너무 섹시하다는 것을 확신합니다. 실제로 페이지에 몇 개의 UpdatePanels가 있지만 문제는 여전히 동일합니다. 다른 답변에 추가 한 다른 의견을 참조하십시오. 귀하의 도움에 여전히 감사드립니다. – jakejgordon

0

불행히도, 우리는이 문제에 대한 훌륭한 해결책을 찾지 못했습니다. 그것은 .net 이벤트와 JQuery AJAX를 혼합하는 유일한 방법 인 것 같습니다. 업데이트하는 요소가 100 % JQuery이거나 100 % .net 이벤트 일 경우입니다. 예를 들어 링크 집합 (예 : 수정 및 삭제)이있는 그림 같은 객체를 동적으로 추가하는 경우 링크는 수동 AJAX (즉, WebMethod를 호출하는 JQuery)를 사용하고 JQuery를 사용하여 DOM을 업데이트해야합니다. 또는 두 링크 모두 업데이트 패널에서 .net 이벤트를 호출해야합니다. 하나의 링크 JQuery를 만들고 다른 링크가 .net 이벤트를 만들려고하면 .net이 DOM이 JQuery에 의해 업데이트되었고 이벤트가 정리 될 수 있다는 것을 모르는 문제가 발생합니다. DOM에서 설정할 적절한 ID가 무엇인지 예측하는 것은 매우 어렵습니다 (JQuery를 사용하는 경우 .NET이 혼동되지 않도록). .NET 4.0에서는 컨트롤 ID를 직접 지정하는 대신 자신의 미친 ID를 생성하는 옵션이 있으므로이 방법이 훨씬 쉽습니다.

0

기존의 혼합 방법은 무엇입니까? < % = 컨트롤 .ClientId %> JS 측에 서버 측 마크 업은 사용할 수 있습니까? 좀 지저분하지만, .NET 4.0까지 당신을 물려 줄 수있는 옵션 일 수도 있습니다.

관련 문제