2010-12-08 4 views
0

Страница:Предотвращение Postback после открытия Диалоговое окно JQuery

<body> 
<form id="frmLogin" runat="server"> 
    <asp:Button ID="btnClick" OnClientClick="openConfirmDialog();" OnClick="PopulateLabel" runat="server"/> 
    <div id="divDialog"></div> 
    <asp:Label ID="lblText" runat="server"></asp:Label> 
</form> 
</body> 

JS

<script type="text/javascript"> 
$(document).ready(function() { 
$("#divDialog").dialog({autoOpen: false, 
        buttons: { "Ok": function() 
             { 
             $(this).dialog("close"); 
             }, 
           "Cancel": function() 
             { 
              $(this).dialog("close"); 
             } 
           } 
        }); 
}); 

function openConfirmDialog() 
{ 
    $("#divDialog").dialog("open"); 
} 

C#

protected void Page_Load(object sender, EventArgs e) 
{ 
    lblText.Text = ""; 
} 

protected void PopulateLabel(object sender, EventArgs e) 
{ 
    lblText.Text = "Hello"; 
} 

Этот код открывает мне диалоговое окно с Ok и Отмена , но он не ждет пользователя ac и немедленно опубликуйте страницу, и ярлык будет заселен. Мне нужно вызвать функцию C#, основанную на активности пользователя. Если пользователь нажимает «Ok», метка должна заполняться, и если пользователь нажимает «Отменить», он не должен вызывать функцию C#. Как мне это достичь?

ответ

0

Добавлен другой кнопки и использовать JQuery щелчок() событие, чтобы вызвать щелчок событие новая кнопка, которая в свою очередь, вызвать соответствующий обработчик событий в C#

3

Во-первых, чтобы предотвратить страницу от немедленного размещения на сервер, вам необходимо отменить поведение по умолчанию click события, возвращая false из обработчика:

<asp:Button ID="btnClick" runat="server" OnClick="PopulateLabel" 
    OnClientClick="openConfirmDialog(); return false;" /> 

Далее, вам необходимо выполнить обратная передача себя, когда ваша кнопка нажата Ok:

$("#divDialog").dialog({ 
    autoOpen: false, 
    buttons: { 
     "Ok": function() { 
      $(this).dialog("close"); 
      __doPostBack("btnClick", ""); 
     }, 
     "Cancel": function() { 
      $(this).dialog("close"); 
     } 
    } 
}); 

Обратите внимание, что первый аргумент __doPostBack() является имени о f контроль (его UniqueID в терминологии ASP.NET). Поскольку кнопка является прямым дочерним элементом элемента <form>, мы можем запрограммировать его id в вызове __doPostBack(), но все будет сложнее, если оно будет находиться в иерархии контейнеров. В этом случае вы можете использовать ClientScript.GetPostBackEventReference() для генерации соответствующего вызова __doPostBack().

EDIT: Поскольку ваша страница не содержит элементов управления с обратной связью, __doPostBack() не будет определяться на стороне клиента. Чтобы обойти эту проблему, вы можете использовать элемент управления LinkButton вместо элемента управления Button.

+0

__doPostBack («btnClick», «»); не вызывает мою функцию C# – 2010-12-08 07:53:44

Смежные вопросы