2010-01-19 2 views
1

페이지의 다른 필드 값에 따라 ConfirmButtonExtender를 무시하려고합니다.조건부 ConfirmButtonExtender

기본적으로 사용자가 "취소"버튼을 클릭하면 confirmbuttonextender 및 modalpopupextender를 사용하여 modalpopup을 표시하여 변경 한 내용을 취소하고 이전 화면으로 돌아가는 대화 상자를 표시합니다 . 사용자가 예를 클릭하면 버튼의 onclick 이벤트가 발생하여 코드 숨김의 일부 코드를 호출하고 사용자를 다른 페이지로 리디렉션합니다. 그들이 no를 클릭하면 변경없이 동일한 페이지로 돌아갑니다.

그러나 상황에 따라 사용자가 편집을 수행 할 수 없다는 사실을 알고 있습니다 (허용되지 않음). 해당 사용자는 '계속 하시겠습니까?'라고 표시하고 싶지 않습니다. 변경 사항을 잃어 버리게됩니다. "대화 상자가 나타납니다.

"cbAllowEdit"라는 숨겨진 확인란 필드를 설정하여 사용자가 필드를 편집 할 수 있는지 여부를 나타냅니다.

나는이 기술을 사용하기 위해 link text에서 찾은 기술을 사용하려고했지만 버튼의 onclientclick 이벤트를 전혀 발사하지 않은 것으로 보입니다.

여기 내 코드입니다. 뒤에

ASPX & 자바 스크립트

<asp:CheckBox ID="cbAllowEdit" runat="server" Checked="true" /> 
     <asp:Button ID="btnCancel" runat="server" CausesValidation="false" 
    OnClick="btnCancel_Click" Text="Cancel" OnClientClick="disableSubmit();return false;" /> 
<ajaxToolKit:ConfirmButtonExtender ID="ConfirmButtonExtenderbtnCancel" 
    runat="server" DisplayModalPopupID="ModalPopupExtenderbtnCancel" 
    TargetControlID="btnCancel" BehaviorID="ConfirmButtonExtenderbtnCancel" /> 
<ajaxToolKit:ModalPopupExtender ID="ModalPopupExtenderbtnCancel" runat="server" 
    BackgroundCssClass="modalBackground" CancelControlID="btnCancelCancel" 
    OkControlID="btnConfirmCancel" PopupControlID="ConfirmCancelPanel" 
    TargetControlID="btnCancel" /> 
<asp:Panel ID="ConfirmCancelPanel" runat="server" CssClass="modalWindow" 
      Height="200" Width="450"> 
      <p class="confirmMessage"> 
       Are you sure you want to navigate away from this record? 
      </p> 
      <div align="center"> 
       <p class="feedbackError">If you have made any changes to the record since the last time 
       you saved, they will be lost.</p> 
       <asp:Button ID="btnConfirmCancel" runat="server" Text="Yes" Width="75" /> 
       <asp:Button ID="btnCancelCancel" runat="server" Text="No" Width="75" /> 
      </div> 
     </asp:Panel> 
     <script type="text/javascript"> 
      function disableSubmit() { 
       if (document.getElementById('<%= cbAllowEdit.ClientID %>').checked) { 
        return checkSubmit(); 
       } 
       else { 
        return true; 
       } 
      } 

      function checkSubmit() { 

       var confirmButton = $find('ConfirmButtonExtenderbtnCancel'); 

       confirmButton._displayConfirmDialog(); 

      } 
     </script> 

코드 : 내가 잘못 뭐하는 거지에

/// <summary> 
     /// Runs when the btnCancel button is clicked. 
     /// </summary> 
     protected void btnCancel_Click(object sender, EventArgs e) 
     { 
      Page.Response.Redirect("~/Searches/LookupCode/Default.aspx"); 
     } 

어떤 아이디어?

답변

4

크리스 말했듯이, 당신은이 사실을 라운드하는 방법처럼 보이지만 자바 스크립트 확인() 함수는 OK로 제한됩니다 (A ConfirmButtonExtender 및 ModalPopupExtender을하고 '대화 상자에서 취소 버튼을 필요가 없습니다 - 미래의 기술로 알려진 :-))

코드 숨김에서 사용자가 (cbAllowEdit 컨트롤에서 알 수 있듯이) 편집을 수행하지 않는다는 것을 알고 있다면, ConfirmButtonExtender를 사용 중지하기 만하면됩니다.

ConfirmButtonExtenderbtnCancel.Enabled = false; 

그런 다음 취소 버튼을 클릭하면 확인하지 않고 코드 숨김 기능으로 이동합니다.

+0

나는 어제 늦게 이것을 결국 알아내어 이것을 끝내었다. –

+0

+1. 아, 잘 했어. 나는 그녀가 이미 편집 모드에 있었다는 것을 알았는지 몰랐다. 전적으로 클라이언트 쪽 수정에 집중했습니다. – Chris

1

편집 :ConfirmPopupExtenderbtnCancel을 나타내지 않아야합니다. 대신 숨겨진 버튼을 가리켜 야합니다 (링크의 예와 같습니다).

<asp:Button ID="btnCancel" runat="server" CausesValidation="false" 
    OnClick="btnCancel_Click" Text="Cancel" OnClientClick="disableSubmit();return false;" /> 
<!-- This is the Hidden Buttons that you need to add and reference in the ConfirmButtonExtender --> 
<asp:Button ID="HiddenButtonConfirm" runat="server" Text="" style="display:none;" /> 
<asp:Button ID="HiddenButtonModal" runat="server" Text="" style="display:none;" /> 
<ajaxToolKit:ConfirmButtonExtender ID="ConfirmButtonExtenderbtnCancel" 
    runat="server" DisplayModalPopupID="ModalPopupExtenderbtnCancel" 
    TargetControlID="HiddenButtonConfirm" BehaviorID="ConfirmButtonExtenderbtnCancel" /> 
<!-- You'll also want the ModalPopup to point to a seperate hidden button. --> 
<ajaxToolKit:ModalPopupExtender ID="ModalPopupExtenderbtnCancel" runat="server" 
    BackgroundCssClass="modalBackground" CancelControlID="btnCancelCancel" 
    OkControlID="btnConfirmCancel" PopupControlID="ConfirmCancelPanel" 
    TargetControlID="HiddenButtonModal" /> 
+0

내가 modalpopupextender을 사용했다

var confirmbtn = $find('ConfirmButtonExtenderID'); confirmbtn.enabled =false; 

// ConfirmButtonExtenderID은 ConfirmButtonExtender 아이디의 이름이 필요 확인 대화 상자가 나타납니다. 나는 그 안에 추가 정보를 넣고 싶었고 어떤 경우에는 더 많은 정보를 요구하는 "주석"텍스트 상자가 있었다. 아마도 내가 이해하지 못하는 다른 것이 있을까요? –

+0

아, 그 말이 맞습니다. 여전히 두 번째 부분은 여전히 ​​적용됩니다. 예제와 같이 숨겨진 버튼이 필요합니다. – Chris

0

이 자바 스크립트가 작동 할 수 있습니다 : [: $] 나는 방법을 제어 할 수 있기를 원하기 때문에