2010-11-23 11 views
6

페이지에 여러 개의 <asp:TextBox TextMode="MultiLine"> 요소가 있습니다. 로드 할 때, 나는 VB 코드를 통해 그것들을 채운 다음, TinyMCE 에디터 (jQuery TinyMCE 플러그인을 통해)로 바꾼다. 각 텍스트 상자에는 데이터베이스에 삽입하기 위해 텍스트를 코드 뒤에 다시 제출하는 목적으로이 텍스트와 연결된 단추가 있습니다.TinyMCE Textarea가 ASP.NET에서 인식하지 못함 CodeBehind

이전에 제출 버튼을 클릭하면 텍스트 상자에 편집기의 내용을 "저장"해야한다는 것을 알게되었지만 이는 내 문제가 아닙니다. 그렇게 한 후에도 편집 내용이 코드 뒤에 나타나지 않습니다.

제가 언급 한 것처럼 저는 jQuery를 사용하고 있습니다. 여기 내 클릭 핸들러입니다. 따라서 submit 클래스, 모든 버튼은 ASP.NET에서 버튼을 제출 있습니다 유의 사항 :

$('input.submit').live('click', function() { 
    tinyMCE.EditorManager.triggerSave(); 
}); 

그래서, 어떤 버튼을 제출할 때 를 클릭 모든 TinyMCE에 편집자는 저장 이벤트가 트리거합니다. 이 작업이 수행 된 후에 내가 찾고있는 텍스트 영역의 값을 (다시 자바 스크립트를 통해) 확인했으며 수정 사항이있는 것 같습니다 (Chrome의 개발자 도구 및 console.log를 사용하고 있습니다) :

서버 측에

console.log($(this).parent().find('textarea').val()); 
는하지만, 내가 제출 버튼의 클릭 핸들러에서 편집의 참조 없음 :

Dim paragraph As String = Me.myTextArea.Text 
' Results in the original text, not the edited text 

기타 참고 사항 :

  • 각 편집기는 자체 업데이트 패널입니다
  • 제출되는 콘텐츠의 성격 상 (HTML) EnableEventValidation="false"ValidateRequest="false" (내부 애플리케이션이므로이 경험이있는 개발자는 경험이 풍부한 개발자)
  • 저는 매우 신입 사원입니다. .NET,하지만이 동작은 나에게 우스운 것처럼 보입니다. 나는 비판적인 것을 놓치고 있어야한다.
+0

어떻게 데이터를 서버로 전송합니까? – Thariama

+0

이 버튼은'OnCommand'를 적절한'CommandName'과'CommandArgument'와 함께 사용하고 코드 숨김에서'Me.myTextArea.Text'에 의해 데이터에 접근합니다. –

+0

실제로 문제를 파악한 것 같지만 아직 내 이론을 테스트하지 않았습니다. 나는'OnCommand' 포스트 백이 먼저 (비동기 적으로 오래된 데이터를 보내는) 실행되고 있다고 생각합니다. 그러면 JS의 내 브레이크 포인트가 히트됩니다 (디버거에서 편집 된 텍스트를 볼 수있게 됨). 그러면 VB의 브레이크 포인트가 히트됩니다. VB 디버거에서 이전 텍스트가 표시됨). 견고한 이론 같지만, 내가 말했듯이, 테스트되지는 않았다. –

답변

6

알아 냈습니다.

정확히 원래 질문에 대한 내 의견에서 제안한 내용이었습니다. ASP.NET 비동기 포스트 백이 발생하여 이전 텍스트를 서버로 보냈습니다. 그런 다음 내 onclick이 발사하여 새 텍스트를 텍스트 영역에 저장하고 내 브레이크 포인트를 쳤습니다 (실제로 새 텍스트가 텍스트 영역에 저장되었음을 볼 수 있음). 그 후 서버는 VB에서 내 중단 점을 때리는 (오래된) 텍스트를 처리했습니다.

ASP.NET은 적어도 비동기적인 방법을 사용할 때 모든 onclick에서 최우선 순위를 얻는 것으로 보입니다. 즉, 자바 스크립트를 통해 추가 된 모든 맞춤 클릭 핸들러는 번의 ASP.NET 클릭 후 을 실행합니다.

이것은 JS가 여러 클릭 핸들러를 처리하는 방식을 감안할 때 어느 정도 의미가 있습니다. 이는 선착순으로 처리됩니다.

$(this).tinymce({ 
    script_url : '../scripts/tiny_mce.js', 
    theme: 'advanced', 
    plugins: 'save', 
    theme_advanced_buttons1 : 'bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,image,link,unlink,|,fontsizeselect,forecolorpicker', 
    theme_advanced_buttons2 : '', 
    theme_advanced_buttons3 : '', 
    content_css : '../css/landingpage-tinymce.css', 
    onchange_callback: function(ed) { 
     ed.save(); 
    } 
}); 

주 텍스트 영역에 편집기의 내용을 저장하는 onchange_callback :

이 솔루션은, 내 경우에는, 오히려 버튼 클릭보다는, 변화에 TinyMCE에 편집기의 내용을 저장하는 것이 었습니다 .에디터가 "언두 레벨 (undo level)"이라고 부르는 내용을 추가 할 때마다 내용을 저장하게됩니다. 이는 사용자가 무언가를 변경하고 커서를 이동하거나 에디터가 블러를 할 때마다 다른 이벤트를 의미합니다.

+0

이것이 전체적인 이야기는 아니며 모든 경우에 작동하지는 않습니다. 나는 그 문제가 뭔지 모르지만, 어떤 도움을 주시면 감사하겠습니다. –

+0

바보 같아요. 내 새 버그는'If Not Page.IsPostBack ... End If'가 부족해서 생겼어. –

관련 문제