Отмена MVC Ajax.Actionlink на основе условия - PullRequest
2 голосов
/ 25 мая 2011

У меня есть список «вещи» в таблице, и у меня есть ссылка «Подробности» в каждой строке, которая будет загружать детали элемента в скрытой строке под каждой видимой строкой, повторное нажатие на ссылку скрывает деталипредмет.Отображение / скрытие выполняется с помощью простого jQuery fadeToggle()

. В настоящее время ссылка сведений - это Ajax.Actionlink(), которая вызывает назначенное действие.Все работает нормально, за исключением случаев, когда я хочу скрыть детали, он снова вызывает действие, которое вызывает логику, которая вызывает базу данных.Очевидно, что это пустая трата ресурсов, поэтому я хотел бы отменить запрос ajax при выполнении условия;при условии, что контейнер «детали» является видимым.

@Ajax.ActionLink("Details", "DetailsPartial",
                 new AjaxOptions { 
                       OnBegin = "function(){
                            checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "');
                       }", 
                 HttpMethod = "GET", 
                 UpdateTargetId = string.Format("Detail{0}", item.Id),
                 OnSuccess = "function(){
                                showElement('" + string.Format("DetailContainer{0}", item.Id) + "');
                             }",
                 InsertionMode = InsertionMode.Replace 
                 })

Я подозреваю, что должен выполнить работу с OnBegin, но мне еще предстоит найти волшебную команду, которая отменяет вызов ajax.С помощью функции checkLoaded() я проверяю .css('display') == 'none' для переданного идентификатора элемента, и поэтому мне нужно было бы отменить там.

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

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

Если вы хотите отменить действие, все, что вам нужно сделать, это вернуть false в методе OnBegin.

@Ajax.ActionLink("Details", "DetailsPartial",
                 new AjaxOptions { 
                       OnBegin = "function(){
                            return !checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "');
                       }", 
                 HttpMethod = "GET", 
                 UpdateTargetId = string.Format("Detail{0}", item.Id),
                 OnSuccess = "function(){
                                showElement('" + string.Format("DetailContainer{0}", item.Id) + "');
                             }",
                 InsertionMode = InsertionMode.Replace 
                 })
1 голос
/ 11 сентября 2012

Я столкнулся с той же проблемой: AJAX-запрос выполняется, даже если анонимная функция из предыдущего ответа вернула false.Это происходит потому, что содержимое OnBegin помещается в анонимную функцию, и если эта функция возвращает false, запрос AJAX отменяется.Это решило мою проблему:

...
OnBegin = "return function(){  
   return !checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "'); 
}", 
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...