Странное поведение подтверждения в Телрике?

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 
    }
Другие вопросы по тегам