Странное поведение подтверждения в Телрике?
somePage.aspx
<asp:LinkButton Runat="server" ID="butDelete" CommandName="Delete" OnClientClick="Confirmation();return flag;"><img src="images/delete.gif" border="0" title='<asp:Literal runat="server" Text="<%$ Resources:ClarityResources, resDelete %>" />'></asp:LinkButton>
ClientSideCode.js
function confirmCallBackFn(sender) {
debugger;
if (sender)
flag = true;
else
flag = false;
return flag;
}
function Confirmation(sender,args) {
debugger;
radconfirm('Are you sure you want to delete this file?', confirmCallBackFn);
}
но при нажатии всегда возвращается значение false, которое является значением по умолчанию, установленным для переменной флага. Когда я выполнил отладку, я увидел, что при нажатии на клиенте вызывается подтверждение метода, и оно возвращает значение по умолчанию false элементу управления, и после нажатия на поле подтверждения Yes или отмена его снова запускает метод callCallBackerFack (отправитель) отдельно, который возвращает флаг, но не в том же потоке, а в другом. Я пробовал разные способы решить эту проблему, но я застрял. так что любая помощь будет отличной.
2 ответа
Вы пытаетесь обработать radconfirm таким же образом, как и обычное подтверждение JavaScript (), это делается не так, как по принципу "похож на подобие". Я начну с функции подтверждения.
function Confirmation(sender, args) {
debugger;
// The line below will open a rad confirmation window, it will not wait for the response
radconfirm('Are you sure you want to delete this file?', confirmCallBackFn);
}
Чтобы гарантировать, что он не будет автоматически отправлять обратно, вышеупомянутая функция должна быть изменена следующим образом:
function Confirmation(sender, args) {
debugger;
// This line will open a rad confirmation window, it will not wait for the response
radconfirm('Are you sure you want to delete this file?', confirmCallBackFn);
// The line below will prevent the control from automatically posting back
return false;
}
Следующим шагом является исправление функции обратного вызова; Параметр, передаваемый в функцию, как видно из кода, а не имя параметра, является логическим представлением результата из поля подтверждения.
function confirmCallBackFn(sender) {
debugger;
if (sender)
flag = true;
else
flag = false;
return flag;
}
Ранее написанная функция возвращает значение, но оно нигде не используется. Следующий код выполнит необходимое действие
function confirmCallBackFn(arg) {
debugger;
if (arg) {
// The line below will perform a post back, you might want to trigger this a different way
__doPostBack(sender.id, "");
}
}
К сожалению, поскольку отправитель не передается в функцию обратного вызова, необходимо объявить функцию в другой функции JavaScript следующим образом:
function Confirmation(sender) {
debugger;
// The callback function
function confirmCallBackFn(arg) {
debugger;
if (arg) {
// Triggers postback only when confirmation box returns true
__doPostBack(sender.id, "");
}
}
// This line will open a rad confirmation window, it will not wait for the response
radconfirm('Are you sure you want to delete this file?', confirmCallBackFn);
return false;
}
Вы можете найти следующую ссылку полезной в отношении использования radconfirm так же, как для подтверждения:
http://demos.telerik.com/aspnet-ajax/window/examples/confirmserverclicks/defaultcs.aspx.
Вот как я предупреждаю пользователя, чтобы подтвердить событие удаления!
<telerik:RadButton ID="btnDelete" runat="server" Text="Delete"
OnClick="btnDelete_clicked" OnClientClicking="RadConfirm" Width="100px">
</telerik:RadButton>
<script type="text/javascript">
function RadConfirm(sender, args) {
var callBackFunction = Function.createDelegate(sender, function (shouldSubmit) {
if (shouldSubmit) {
this.click();
}
});
var text = "Are you sure you want delete ?";
radconfirm(text, callBackFunction, 300, 100, null, "Confirm Apply !");
args.set_cancel(true);
}
</script>
protected void btnDelete_clicked(object sender, EventArgs e)
{
//Write your server-side delete code here
}