2010-06-03 2 views
5

У меня есть таблица с несколькими строками элементов данных. Для каждой строки это будут некоторые actionlinks, которые вызовут некоторые методы (удалить dataitem, изменить статус dataitem и т. Д.)mvc ajax.actionlink с диалогом jquery подтвердить

Прежде чем каждый пользователь нажимает кнопку, я хочу, чтобы диалоговое окно jquery отображалось и давало пользователю диалог с некоторая информация, кнопка «ОК» и «Отмена».

Некоторые примеры код Ajax.ActionLink, который будет вызывать метод ChangeStatus:

<%= Ajax.ActionLink(item.Status, "ChangeStatus", new { id = item.Id }, new AjaxOptions { UpdateTargetId = "ListReturns-Div", OnBegin = "StartChangeStatus", OnSuccess = "EndChangeStatus", OnFailure = "FailureChangeStatus" }, new { @class = "StatusBtn" })%> 

Это функция JQuery, которая называется:

function StartChangeStatus(e) { 
      $('#dialog-confirm').dialog({ 
       resizable: false, 
       height: 200, 
       modal: true, 
       buttons: { 
        'Continue': function() { 
         $(this).dialog('close'); 
         $('#Loading-Div').show('slow'); 
        }, 
        Cancel: function() { 
         $(this).dialog('close'); 
         e.preventDefault(); 
        } 
       } 
      }); 
     } 

ActionLink и функции JQuery работы. Но проблема в том, что я не могу приостановить/остановить текущее действие при нажатии ссылки actionlink. Когда кнопка нажата, процесс дыр запускается, и кнопка подтверждения диалога игнорируется. Итак, мой вопрос заключается в том, как изменить actionlink или функцию jquery для работы, как требуется, с подтверждением диалога перед продолжением?

+0

в случае, если вам понадобится диалоговое окно подтверждения для типа ввода: submit, вы можете использовать его здесь. Http://awesome.codeplex.com/ – Omu

ответ

4

Я также пробовал ваш код, получая такое же поведение. Я изменил ваш код, чтобы отобразить окно подтверждения.

<%= Ajax.ActionLink("Link", 
        "ChangeStatus", 
        new { id = 3 }, 
        new AjaxOptions { UpdateTargetId = "ListReturns-Div", 
             HttpMethod = "Post", 
             Confirm = "confirmClick" }, 
             new { @class = "StatusBtn" } 
        ) 
%> 

и отображается подтверждение javascript. Нужно найти причину, по которой она не работает.

+0

это работает для меня спасибо :) –

+0

Cool ... this работает на меня. – BeemerGuy

+0

Так просто, должен быть выбран ответ – jonprasetyo

2

От my website:

Теперь Ajax.ActionLink действительно полезно, и подтверждение AjaxOption еще ... еще, кто хочет это дерьмовый Javascript оповещения в эти дни? Я разрабатываю приложение с Ms MVC 2, и я использую фантастическую библиотеку JQueryUI для настройки визуализации всех моих элементов. Одна из лучших вещей, которые JQueryUI имеет, - это диалоговые окна ... такие как «Вы уверены, что хотите удалить этот файл? Да/Нет» ... и я ХОЧУ ИСПОЛЬЗОВАТЬ ИХ В МОЙ Ajax.ActionLink!

Поскольку я не нашел ответа в сети, я искал простой способ сделать это ... и теперь я размещаю его здесь.

Первое: читать и осуществлять на своей странице в хороший учебник, написанный Рикардо Кову: «ASP MVC Удалить подтверждение с Ajax & JQuery UI Dialog» (Просто Google его)

Я сделал простые изменения в свой код Javascript, просто используя remove() вместо hide («fast») и применяя класс «item» к tr для удаления.

deleteLinkObj.closest("tr").hide('fast') 

становится

deleteLinkObj.closest("tr.item").remove(); 

Теперь, после того, как вы выполнили предыдущий учебник, вы готовы заменить

<%: Html.ActionLink([LinkName],[ActionName], new { id = item.Id }, new { @class = "delete-link" })%> 

строку с

<%:Ajax.ActionLink([LinkName],[ActionName],[ControllerName],new { id = item.Id },new AjaxOptions{HttpMethod = "Delete" /*You can use Post though*/,OnBegin = "JsonDeleteFile_OnBegin" /*This is the main point!*/}, new { @class = "delete-link" }) %> 

Вы можете использовать Если вы хотите, Важно здесь вариант OnBegin, что вызывает JavaScript, который предотвращает действие сервера вызываться до JQueryUI Диалог подтверждения:

<script language="javascript">function JsonDeleteFile_OnBegin(context) {return false;/*Prevent the Ajax.Action to fire before needed*/}</script> 

Поместите Javascript на этой странице.

Итак, что произойдет: когда вы нажмете на кнопку «Удалить», он откроет JQueryUI, одновременно называя функцию OnBegin (которая отменяет нормальное действие post). В случае «Подтвердить» код Ricardo Covo упустит действие на стороне сервера, а в JavaScript-коде подтверждения Ricardo Covo вы сможете выполнить все действия в случае успеха (например, скрывать удаление строки).

Обратите внимание: С помощью этого метода вы должны управлять функцией для успеха/не в яваскрипта коде Рикардо Кову, так как OnSuccess и OnComplete AjaxOptions не будет срабатывать на всех (вероятно переписаны некоторый код).

+0

Почему -1? Я думаю, что это полезный ответ и сегодня работает для меня как шарм (также после перехода на MVC3). – fgpx78

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