2012-04-11 5 views
0

링크 버튼을 누르면 JavaScript 및 일부 코드 (C#)가 호출되는 양식이 있습니다. 정상적인 작업은 다음과 같이 작동해야합니다. 폼의 레이블에서 텍스트를 가져 오는 링크 버튼을 클릭하고 HTML 편집기를 열고 텍스트 편집기에서 '완료'를 클릭 한 다음 양식에 텍스트를 다시 표시하여 텍스트를 저장합니다. 그것은 모든 것을 할 것이지만 오류가 발생합니다 (제어가 정의되지 않았습니다). 그러면 폼에서 다른 작업을 수행 할 수 없습니다.함수 호출 사이에 javacript 변수가 정의되지 않게되었습니다.

먼저 HTML 편집기와 HTML 편집기를 보유하고있는 my aspx 코드를 보자.

<asp:Panel ID="EditCommentPopup" runat="server" SkinID="PopupPanel" HorizontalAlign="Center" Width="500px" Style="display:none;"> 
       <div id="SendCommentHeader" class="modalPopupHeader"> 
        <table width="100%" style="vertical-align: middle"> 
         <tr> 
          <td style="width: 50%; text-align: left; padding-left: 5px;"> 
           <asp:Label ID="EditCommentHeaderLBL" runat="server" Font-Bold="true" Text="Change Comment" ></asp:Label> 
          </td> 
          <td style="width: 50%; text-align: right; padding-right: 3px;"> 
           <asp:Button SkinID="SubmitButton" ID="SaveComment" runat="server" Text="Done" OnClientClick="submitEditorPopup(); return true;" OnClick="SubmitCommentButton_Click"/> 
           <asp:Button SkinID="CancelButton" ID="cancelCommentButton" runat="server" Text="Cancel"/> 
          </td> 
         </tr> 
        </table> 
       </div> 
       <ajaxToolkit:ModalPopupExtender ID="EditCommentPopupExtender" runat="server" TargetControlID="EditCommentHeaderLBL" 
         PopupControlID="EditCommentPopup" BackgroundCssClass="modalBackground" PopupDragHandleControlID="EditCommentPopup" 
         DropShadow="False" CancelControlID="cancelCommentButton" BehaviorID="ChangeCommentsPopup" > 
       </ajaxToolkit:ModalPopupExtender> 
       <asp:Panel ID="EditCommentInnerPanel" SkinID="PopupInnerPanel" HorizontalAlign="Center" runat="server" > 
        <asp:Label ID="CommandArgLBL" runat="server" Visible="false"></asp:Label> 
        <custom:CustomTextEditor ID="EditCommentsTextBox" runat="server" Width="100%" Height="300px" NoScript="true" /> 
       </asp:Panel> 
      </asp:Panel> 

여기 내 자바 스크립트 기능

var contentLBL; 
var editorControl; 
var hiddenField; 
function LoadEditorPopup(labelID, editorID, hiddenID, linkID) { 
    editorControl = document.getElementById(editorID); 
    contentLBL = document.getElementById(labelID); 
    hiddenField = document.getElementById(hiddenID); 
    editorControl.control.set_content(contentLBL.innerHTML); 
    var popup = $find("ChangeCommentsPopup"); 
    popup.show(); 

} 

function submitEditorPopup() { 
    var tmp = editorControl.control.get_content(); //error flags here 
    contentLBL.innerHTML = tmp; 
    var str= new String(); 
    str = tmp; 
    str = str.replace(/</g, "{%"); 
    str = str.replace(/>/g, "%}"); //stripping out html tags to prevent sql insertion 
    hiddenField.value = str; 
    var popup = $find("ChangeCommentsPopup"); 
    popup.hide(); 
} 

그리고 여기가

protected void ShowEditCommentPopup(object sender, EventArgs e) 
{ 
    string arg = ((LinkButton)sender).CommandArgument; 
    string content = ""; 
    string title = ""; 
    switch (arg) 
    { 
     //doing stuff, setting content and title 
    } 
    EditCommentHeaderLBL.Text = title; 
    CommandArgLBL.Text = arg; 
    EditCommentsTextBox.Content = content; 
    EditCommentPopupExtender.Show(); 

    EditModalPopupExtender.Show(); //this is the form 
} 

그래서, 여기에 무슨 일이 일어나고 있는지, 나는 (영문 코드에서 도시하지 않음)의 LinkButton을 클릭 내 C# 기능입니다입니다 그리고 그것은 자바 스크립트에서 LoadEditorPopup 함수를 시작합니다. 그것의 내용을 수행하고 onclientclick 호출에서 'return true'를 가져와 다음 코드 인 ShowEditCommentPopup이 호출되도록합니다. 편집기가 튀어 나오고 잘 사용할 수 있습니다. '완료'를 클릭하면 자바 스크립트에서 SubmitEditorPopup 이벤트가 발생하고 변수 EditorControl이 정의되지 않았다는 오류가 발생합니다. 나는 ShowEditCommentPopup 메서드를 호출하지 않으면 오류가 발생하지 않는다는 것을 알았지 만, 원래이 문제가 수정되면 수정 될 것이라고 기대했던 다른 문제로 되돌아갑니다.

정말 충분히 명확했으면합니다. 미리 감사드립니다!

답변

0

자바 스크립트 기능이있는 스 니펫이 있습니다. 그 코드는 어디에서 살고 있습니까? 두 번째 호출 될 수있는 클래스 또는 함수 안에 있습니까? 그렇다면 var editorControl;이 다시 실행되어 이전 editorControl 변수를 무시할 수 있습니다. 나는 확실하게 var editorControl;에 대한 경고를 할 것이다.

alert('Should only happen once'); 
var editorControl; 

이 도움이되지 않았기 때문에

, 난 당신이 submitEditorPopup에

tmp = document.getElementById(editorID); 

var tmp = editorControl.control.get_content(); 

를 교체 시도 할 수 같아요.

+0

나는 당신의 제안을 시도했으며, 단지 한 번 갑자기 나타났습니다. 내가 가지고있는 것은 한 번만 발생하는 변수의 선언입니다. –

+0

나는 자바 스크립트를 전혀 사용하지 않고 단지 코드를 사용함으로써 내 문제를 해결할 수 있었다. 나는 새로운 문제가 생겼고, 반주가되었지만 나는 다른 게시물을 받아야한다고 생각한다. 도와 주셔서 감사합니다! –

관련 문제