Мне нужен очень простой код в ASP.NET.
Внутри любой кнопки на странице, содержащей набор кода оператора, пользователю предлагается подтвердить продолжение.
Если он соглашается, он выполняет эти заказы или останавливается.
Не могли ли вы помочь мне, пожалуйста?
if (ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Are you sure');", true) == ok)
{
Label1.Text = "ok";
// other statements
}
else
{
Label1.Text = "no";
// other statements
}
Вы не можете сделать такой код в веб-земле. Помните, что код запускается ТОЛЬКО, когда пользователь просто нажимает кнопку, ТОГДА вся веб-страница отправляется на сервер. Код запускается, И ЗАТЕМ вся страница возвращается в браузер на стороне клиента. Страница загружается, отображается, а ТОГДА даже код JavaScript НАЧИНАЕТ выполняться. На стороне сервера веб-страница разгружается — сдувается вдребезги. Теперь веб-сервер ожидает публикации ЛЮБОЙ веб-страницы — необязательно вашей страницы!
Таким образом, код НИКОГДА не может и не будет взаимодействовать напрямую с пользователем. Код ТОЛЬКО может касаться, изменять веб-страницу, которая находится на сервере, в течение ОЧЕНЬ короткого периода времени.
Если вы скажете сделать это:
TextBox1.Text = "Hello how are you?";
ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Are you sure');", true) == ok)
Или это:
ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Are you sure');", true) == ok)
TextBox1.Text = "hello world";
Эффект ТАКОЙ.
Что происходит, так это:
Итак, теперь веб-страница перемещается на сервер.
Ваш код может изменить это текстовое поле. И ТОГДА вставьте блок JavaScript.
Вы получаете это:
Код позади работает. Он внедрит JavaScript, запустит код для установки текстового поля.
на данный момент, какое имеет значение, если я сначала установлю текстовое поле или введу JavaScript? страница находится на веб-сервере, просто сидит на своем. Пользователь видит, что веб-спиннер «ждет».
Теперь, когда ваш код выполнен (и пользователь ПО-ПРЕЖНЕМУ не видит никаких изменений), тогда ВСЯ страница отправляется обратно на клиентскую сторону следующим образом:
Затем вся страница перезагружается, затем снова запускается JavaScript, и наш внедренный блок кода СЕЙЧАС запускается!!!
Итак, как вы можете видеть выше, мы на самом деле не взаимодействуем с пользователем напрямую - и на самом деле мы не можем!!! - веб-страница перемещается на сервер - ваш код запускается и имеет очень короткое окно времени для изменения страницы, а затем ВСЯ страница отправляется обратно клиенту, страница перерисовывается, перезагружается, а затем JavaScript снова запускается.
Таким образом, вы не можете «ждать», так как любой ожидающий код приведет к тому, что веб-страница застрянет на стороне сервера.
Итак, выше порядок двух команд не имеет большого значения, не так ли? Я могу изменить текстовое поле или внедрить какой-нибудь скрипт, но НИ ОДИН из них не будет запущен и не будет виден конечному пользователю до тех пор, пока ВСЯ страница не вернется обратно на сторону клиента.
Итак, какие-либо изменения на странице, да еще и в другом порядке в большинстве случаев значения не имеют. Ваш код вносит изменения в веб-страницу ДО ТОГО, как ВСЯ страница будет передана обратно на сторону клиента. Таким образом, в большинстве случаев порядок вещей и элементов управления, которые вы меняете на странице, не имеет значения, поскольку эти изменения не могут быть видны конечному пользователю, пока ВЕСЬ ваш код не будет выполнен, а затем вся страница начинает вернуться на сторону клиента.
Так что, по сути, понимание этой концепции кругового пути является действительно наиболее фундаментальной концепцией, которую вы должны всегда иметь в виду, чтобы писать веб-код с помощью asp.net. Вы действительно не можете заниматься веб-разработкой без вышеперечисленного.
Итак, мы можем, однако, добавить к кнопке и использовать confirm() следующим образом:
наш самолет Джейн кнопку asp.net?
Теперь у него будет две программы!!!
У него будет событие клика на стороне клиента. Эта часть делает диалог или подсказку. Если пользователь отвечает «да», мы разрешаем выполнение нажатия кнопки (на стороне сервера). Но помните, что такой код может работать только на стороне клиента - это означает, что ВСЯ страница должна находиться на рабочем столе пользователя - в этот момент код не выполняется.
Итак, в самом простом формате, скажем, у нас есть кнопка для удаления записи.
Но, простое нажатие на кнопку - довольно опасно.
Таким образом, вы можете добавить заглушку кода (JavaScript) к кнопке следующим образом:
<asp:Button ID = "cmdDelete" runat = "server" Text = "Server delete prompt"
OnClientClick = "return confirm('Really delete this file?');" />
Итак, когда мы нажимаем эту кнопку, вы получаете приглашение JavaScript. И если он возвращает «true», то код кнопки ДЕЙСТВИТЕЛЬНО работает.
Таким образом, в отличие от настольного кода, вы можете использовать этот «старый способ», скажем, блок кода if/then и на основе приглашения пользователя условно запускать этот код. (потому что код запускается ТОЛЬКО во время так называемой обратной передачи (туда и обратно).
Итак, приведенное выше будет работать нормально и выглядит так:
Теперь, конечно, «основная» проблема заключается в том, что встроенные диалоговые подсказки браузера выглядят довольно уродливо.
Используете красивые диалоговые окна?
Конечно, за исключением "alert()" и "confirm()" в JavaScript, какой код HALT в браузере? В большинстве случаев это больше не разрешено - так как это может заблокировать и зависнуть браузер.
И, таким образом, теперь почти КАЖДАЯ новая красивая "надстройка"? Код, как правило, в JavaScript больше НЕ ждет — он работает асинхронно.
Итак, скажем, мы используем jQuery.UI и хотим сбросить ОЧЕНЬ уродливый встроенный в браузер alert() или диалоговое окно подтверждения?
Вы можете сделать это следующим образом:
<asp:Button ID = "cmdTest" runat = "server" Text = "Server Delete Prompt" ClientIDMode = "Static" style = "display:none"
OnClientClick = "return mytest(this)"/>
<br />
<div id = "MyDialog" style = "display:none">
<h2>my cool dialog text</h2>
<h2>This delete operation can't be undone</h2>
</div>
</div>
<script>
var mytest2ok = false
function mytest(cmdBtn) {
if (mytest2ok) {
return true
}
myDialog = $("#MyDialog")
myDialog.dialog({
title: "Delete the whole server system",
modal: true,
appendTo: "form",
autoOpen: false,
buttons: {
ok: function () {
myDialog.dialog('close')
mytest2ok = true
$(cmdBtn).click()
},
cancel: function () {
myDialog.dialog('close')
}
}
})
myDialog.dialog('open')
return false
}
</script>
В этом случае мы снова вызываем и настраиваем OnClientClick. Но код jQuery.UI, как я уже заметил, не ждет. Итак, мы нажимаем кнопку, отображается наш диалог, код JavaScript выполняется и завершается!!! - вот почему мы добавили флаг ok.
Итак, диалог отображается. Пользователь нажимает «ОК», а затем мы запускаем заглушку кода «ОК», он устанавливает наш флаг и снова нажимает кнопку!!! - на этот раз код кнопки на стороне клиента возвращает true, и нажатие кнопки на стороне сервера будет выполнено. Этот код выглядит так и позволяет вам красиво выглядящий диалог, и, по сути, ЖЕ ЖЕ результаты - всплывающее диалоговое окно для условного запуска или нет кода на основе пользовательского ввода.
jQuery.UI позволяет вам использовать содержимое «div» для всего, что вы хотите в диалоговом окне.
Итак, теперь у нас есть это:
Итак, это веб-диалоговое окно — оно даже делает экран «серее-темнее» для вас. И это модель. Но код не заморожен, и когда вы нажимаете «ОК», запускается заглушка «ОК» и снова нажимает кнопку на стороне сервера.
Итак, в большинстве случаев необходимо:
Откройте диалоговое окно в клиентском браузере, а ЗАТЕМ выберите, щелкнуть или запустить код кнопки на стороне сервера, если хотите.
Не могли бы вы сделать это на стороне сервера 100%? ну, вы, вероятно, могли бы, если бы использовали ДВЕ кнопки и спрятали 2-ю кнопку. Итак, вы нажимаете на первую кнопку. Код на стороне сервера запускается и внедряет JavaScript в всплывающее диалоговое окно, а затем на основе да/нет будет нажата вторая кнопка, и заглушка кода на стороне сервера будет запущена. Но ЗАМЕЧАНИЕ ОЧЕНЬ близко, это предполагает и означает, что вы снова НИКОГДА не ждете в середине своего кода-заглушки на стороне сервера, но собираетесь открыть диалоговое окно, а затем на основе ответа пользователя другой код кнопки будет запускаться на стороне сервера.
Как уже отмечалось, таким образом, преимуществом является размещение диалогового окна ПЕРЕД кнопкой на стороне сервера с использованием кода на стороне клиента для определения выбора «да/нет».
Таким образом, в зависимости от ввода пользователя вы либо нажимаете (запускаете) код кода сервера кнопки, либо нет. Но нет практических средств «остановить» код на стороне сервера в середине заглушки кода, чтобы дождаться подсказки, поскольку, ссылаясь на приведенную выше диаграмму, вы можете видеть веб-страницу, когда на сервере нет взаимодействия с пользователем. , но ваш код может изменить веб-страницу только ДО того, как она вернется на клиентскую сторону.
Таким образом, почти всегда нам нужен бит кода на стороне клиента, а затем мы выбираем да/нет, чтобы запустить эту кнопку.
Таким образом, код НИКОГДА не взаимодействует с пользователем, а может ТОЛЬКО ждать, пока ВСЯ веб-страница будет отправлена на сервер (для запуска кода).