2013-07-10 2 views
6

this과 같은 다른 솔루션을 보았습니다.이 솔루션은 매우 간단하지만 javascript 함수가 confirm('sure?'); 이상을 수행하면 어떻게됩니까? 나는 언제 그것이 bool을 돌려 줄 것인지 결코 모른다.단추 다시 게시를 가로 챌 수있는 가장 좋은 방법

<button id="btnDelete" name="btnDelete" class="btn">Delete</button> 
<asp:Button ID="_btnDelete" runat="server" OnClick="_btnDelete_Click" style="display:none;" /> 

$('#btnDelete').click(function (e) { 
    $.blockUI({ message: $('#divConfirmDeleteModal'), overlayCSS: { cursor: 'default' }, css: { cursor: 'default' }, baseZ: 5555 }); 
    return false; 
}); 

$('#btnDeleteYes').click(function() { 
    $('#<%=_btnDelete.ClientID%>').trigger('click'); 
}); 

$('#<%=_btnDelete.ClientID%>').click(function (e) { 
    // the delay happens here. if i put an alert here, it fires, 
    // but then the page just loads until eventually the method gets called 
    <%= ClientScript.GetPostBackEventReference(_btnDelete, string.Empty) %>; 
}); 

을 .. 그리고 지금까지 잠시 동안 잘 작동 것 :

그래서 나는이 같은 모든 내 ASP.NET 버튼을 구현하기로 결정했습니다. IE (심지어 버전 10)에서 문제가 발생합니다. _btnDelete_Click은 궁극적으로 버튼을 클릭 한 후 호출되기까지 2 분이 소요됩니다.

너무 해킹 된 느낌이 들며 더 나은 접근 방법이 있는지 궁금합니다.

편집 :here 그것을 할 수있는 또 다른 "올바른"방법입니다하지만 난 "예"오히려 브라우저의 기본 확인 대화 상자를 사용하는 것보다, 클릭 애호가 모달 대화 상자를 사용하면 true를 돌려을 할 수있게하려면 .

EDIT2 : 나는 내가 무엇인가 부탁 해요, 당신은 수동으로 클라이언트 스크립트에서 이벤트를 클릭 트리거 이상인 경우 한 가지

+0

왜이 서버 측을 처리하지 않습니까? –

+0

무슨 소리 야? ClientScript.RegisterStartupScript를 사용 하시겠습니까? 내가 생각하기에 클라이언트 쪽을 처리하고 싶습니다. – user982119

+0

나는 특히 JavaScript가 공용 웹 사이트 인 경우 JavaScript에 의존하지 않을 것입니다. JavaScript가 비활성화되어 있거나 JavaScript가 잘못된 모바일 브라우저를 사용하고 있다면 어떻게해야합니까? 달성하고자하는 것은 무엇입니까? –

답변

3

를 않는 OnClientClick 기능에 대한 부울을 반환하는 방법이있다 생각하여 응용 프로그램은 모바일 브라우저의 이동 단추로 제대로 작동하지 않습니다.

다음은 클라이언트 사이드에서 수동으로 버튼을 누르지 않고 버튼 사이드 클릭 이벤트를 차단할 수있는 방법입니다.

<script type="text/javascript"> 
    function clientClick() { 
     if (confirm("Are you sure you want to delete?")) { 
      // Do something at client side before posting back to server 
      return true; 
     } 
     return false; 
    } 
</script> 

<asp:Button runat="server" ID="DeleteButton" Text="Delete" 
    OnClick="DeleteButton_Click" OnClientClick="return clientClick();" /> 

ASP.Net MVC를 사용하면 많은 것을 할 수 있습니다. 그러나 이들은 전통적인 ASP.Net에서 많은 문제점을 야기합니다.

+0

더 멋진 모달 대화 상자를 보여주는 방법에 대해 머리를 감쌀 수 없습니다. ('') 대신 "예"(BlockUI와 같은)를 반환하고 true를 반환합니다. – user982119

+1

버튼의 OnClientClick에서 항상 false를 반환하고 실제 포스트 백을 수행 할 팬시 모달 대화 상자에 실제 다시 보내기 버튼을 추가합니다. iframe 또는 이와 유사한 것을 가지고 있지 않다면 괜찮을 것입니다. 결국, 그것이 당신이 원하는 것입니다 - "메인"버튼은 실제로 행동을하지 않아야합니다, "확인"버튼이 행동을해야합니까, 그렇지 않아? – Bikonja

+0

좋아, 이마/손 순간, 고마워, 의미가있다 – user982119

0

환상적인 모달 대화 상자를 표시하려면 jQuery UI 대화 상자 위젯을 사용할 수 있습니다. 귀하의 예제와 일치하기 위해, 예를 들어 웹 형태의 본문 요소에 대한 다음 코드를 검토하십시오

<form id="form1" runat="server"> 
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
    <div id="deleteConfirmationDialog" title="Warning!">Are you sure you want to delete?</div> 
    <asp:Button ID="_btnDelete" runat="server" Text="Delete" OnClick="_btnDelete_ServerClick" OnClientClick="return _btnDelete_ClientClick();" /> 
</form> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script> 
<script type="text/javascript"> 
    function doPostBack(theForm, eventTarget, eventArgument) { 
     if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
      theForm.__EVENTTARGET.value = eventTarget; 
      theForm.__EVENTARGUMENT.value = eventArgument; 
      theForm.submit(); 
     } 
    } 

    function showConfirmationDialog(dialogSelector, callback, form, target) { 
     $(dialogSelector).dialog({ 
      resizable: false, 
      height: 200, 
      modal: true, 
      buttons: [{ 
       text: "Yes", 
       click: function() { 
        $(this).dialog("close"); 
        callback(form, target, null); 
       } 
      }, 
      { 
       text: "No", 
       click: function() { 
        $(this).dialog("close"); 
       } 
      }] 
     }); 
    }; 

    function _btnDelete_ClientClick() { 
     showConfirmationDialog("#deleteConfirmationDialog", doPostBack, $("#form1").get(0), "_btnDelete"); 
     return false; 
    } 

    $(document).ready(function() { 
     $("#deleteConfirmationDialog").hide(); 
    }); 
</script> 

제어 "_btnDelete"과 관련된 뒤에 코드 (방법은 "_btnDelete_ServerClick")는 경우에만 실행됩니다 당신 "삭제"버튼을 누른 후 모달 대화 상자에서 "예"버튼을 클릭하십시오. 헤드 섹션에 jQuery를 UI의 CSS 파일을 추가하는 것을 잊지 마세요 :

<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery.ui.all.css"/> 
0

억압 된 기억이 깨어나 - 내가 3.5 년 전에 asp.net 웹 양식과 같은 싸움을했다. Enter 키를 누르고 모달 대화 상자를 표시하여 제품에 몇 가지 설명 (예 : 리퍼브 상품 등)이있는 경우 순서를 확인하여 ajax 호출을 그리드 내에서 구현해야했습니다. 오래된 코드 부분을 찾아

은 내가 난 단지 표준 HTML 버튼을 사용하여 결국 모든 기본값을 방지하기 위해 자바 스크립트의 종류와이

<button type="button" 
    onclick="SearchProducts(event,this);">Search Products</button> 
<asp:Button ID="btnSearch" ClientIDMode="Static" runat="server" 
onclick="btnSearch_Click" 
OnClientClick="SearchProducts(event,this)" 
UseSubmitBehavior="false" 
Text="Does nothing" /> 

처럼

// prevent the browser event bubbling for example posting the webform 
function stopDefault(e) { 

    if (e.preventDefault) { 
     e.preventDefault(); 
     e.stopPropagation(); 

    } else { 
     event.returnValue = false; 
     event.cancelBubble = true; 
     e.returnValue = false; 
     e.cancelBubble = true;    
    } 
} 

및 HTML/ASP를 버블 링을 발견했다 asp.net 버튼을 사용하지 않았다. 왜냐하면 asp.net 웹 폼의 모든 내장 함수와 마술을 싸우는 번거 로움이 적기 때문이다.

asp : button을 사용하지 않는 것이 좋습니다. 정말 권장할만한 옵션입니다.

+0

코드 스 니펫을 보내 주셔서 감사합니다. 내가 할 수있는 곳에서는 피할 수 있지만, 파일 업로드와 같은 경우에는 사용할 것입니다. MVC 로의 전환은 느린 전환입니다. – user982119