#asp.net #ajax #.net-2.0
Вопрос:
У меня есть таблица, созданная в списке данных в ASP.Net. Эта таблица содержит три текстовых поля, затем поле с кнопкой редактирования и поле с кнопкой удаления. Когда пользователь нажимает кнопку «Удалить», он отправляет ответ, удаляет элементы, а затем снова связывает список данных. Список данных находится в панели обновления, поэтому элемент плавно исчезает через полсекунды или, может быть, немного больше, но мне бы очень хотелось, чтобы строка выскользнула (вверх), как только они нажмут кнопку удаления, а затем он удалит элемент на обратной стороне.
Я могу заставить строку выскользнуть с помощью jQuery, но обратная связь мешает. Как вы с этим справляетесь?
Ответ №1:
Вы можете использовать методы страницы в asp.net чтобы отправить запрос на сервер без выполнения обратной передачи. Они очень просты в использовании, и вы можете делать все, что вам нравится, когда вызов ajax завершен (вы получаете функцию, вызываемую при успешном выполнении).
Если вы хотите придерживаться обратного сообщения, одно из решений заключается в следующем:
<asp:Button id="myButton" OnClientClick="return fadeThenAllowSubmit()" ... />
и в js что-то вроде:
var allowSubmit = false;
function fadeThenAllowSubmit() {
if (allowSubmit) return true
// do the jquery stuff that will be completed in, let's say, 1000ms
setTimeout(function() {
allowSubmit = true
$("input[id$=myButton]").click()
allowSubmit = false
}, 1000)
return false
}
Это немного хак, идея состоит в том, чтобы сначала отменить обратную передачу, сделать кое-что, а затем установить таймер, по которому будет включена обратная передача. Большая проблема с этим подходом заключается в том, что эффект затухания и фактическое удаление независимы (в случае ошибки вы все равно получите эффект затухания).
Ответ №2:
вы пробовали просмотреть какие-либо элементы инструментария управления Ajax? Я полагаю, что там есть некоторые элементы управления, которые будут работать с кодом на стороне клиента (java), если вы не очень знакомы
Ответ №3:
Я бы использовал Javascript на стороне клиента, чтобы вручную уменьшить CSS-свойство «непрозрачность» до нуля, затем пометить элемент как «отображение: нет», а затем отправить обратную запись.
Я считаю, что в Internet Explorer для этого вам нужно использовать свойство CSS «Фильтр», так как оно не поддерживает непрозрачность.
Вы можете просто запрограммировать процедуру для установки обоих свойств, и она должна охватывать все основные браузеры.
Комментарии:
1. Поэтому напишите цикл, который выполняет это, прежде чем возвращать значение true, вместо использования jQuery/
2. Бинго! Вам, вероятно, понадобится какая-то отсрочка. Вам, вероятно, придется немного поэкспериментировать, но мой подход должен сработать.
3. Есть ли какой-нибудь способ вызвать веб-службу для удаления элемента из javascript? Таким образом, я мог бы использовать хороший чистый jQuery fade и даже не отправлять ответ?
Ответ №4:
Зарегистрируйте обработчик для события формы «отправить».
$("form").submit(function() {
// if user initiated delete action
// do your thing with deleted row (effects, etc.)
// after you're done with it, submit the form from script
// (you can queue the submission after the effect)
// the submission from the script won't trigger this event handler
return false; // prevent submission
}
Предотвращение отправки формы необходимо, чтобы избежать вмешательства в эффекты, которые вы хотите выполнить. После того, как они будут закончены, вы можете приступить к отправке.
Комментарии:
1. Не совсем прямолинейно сказать, что пользователь удалил элемент в этом коде. Я думаю, я мог бы установить переменную после нажатия на кнопку. Это то, что вы хотели бы предложить?
2. Да, это был бы один из способов сделать это. Но если вы не можете легко различать различные кнопки отправки, просто предотвратите отправку формы и прикрепите разные обработчики к кнопкам удаления и другим кнопкам (отправки или редактирования). В разделе «Удалить» обработчики выполняют ваши действия, а затем отправляют форму.