Для внедрения клиентского кода JavaScript в разметку страницы, генерируемой c# существует множество подходов. Каждый из представленных ниже препочтительнее использовать в конкретной ситуации, иногда невозможно по определенным причинам применить какой-нибудь конкретный вариант, но всегда будет тот, что оптимально подходит в данной ситуации. Итак.
Первый способ - самый любимый новичками в ASP.NET
В бихайн-коде в требуемом месте записываем инструкцию Response.Write
string java = “Some JavaScript code”;
Response.Write(java);
Но, во первых не возможно управлять местом вывода параметра, что иногда чрезвычайно важно, а во вторых – плывут стили на странице. В итоге, вся разметка «съезжает и расползается по швам».
Другой вариант более управляемый
В разметке страницы, к примеру, в теге body вставляем блок серверного кода
<body>
...
<%=java %>
...
</body>
а в бихайн коде где-нибудь, где это необходимо, устанавливаем значение в переменную:
protected string java;
void Page_Load(object sender, EventArgs e)
{
java = “Some JavaScript code”;
}
Этот подход прекрасно работает, но все ж он не соответствует природе OOP и больше напоминает о технологии ASP.
Более правильным будет третий подход
В данном случае, целесообразно воспользоваться встроенными функциями платформы .NET, а именно методом регистрации клиентских скриптов Page.ClientScript.RegisterClientScriptBlock:
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(), “clientScript”, java);
На последок хочу показать, как при нажатии на кнопке предварительно получать клиентское окно с подтверждением желаемых действий. К примеру, на странице имеется кнопка, по нажатию на которой серверная сторона производит удаление запи из БД. Естественно, перед удалением желательно переспросить клиента о желании удалять запись. Но перезагружать страницу с целью вывода запроса на подтверждение действия – очень плохая идея.
Как я уже сказал, лучше на клиенте переспросить и уже исходя из полученных результатов отправлять данные на сервер, или нет.
Итак, у любой кнопки есть два свойства OnClick и OnClientClick
<body>
<asp:Button ID="Mybtn" runat="server" onclick="Mybtn_Click"
onclientclick="return ConfirmAction()" Text="Удалить запись" />
<script type="text/javascript" language="javascript">
function ConfirmAction ()
{
return confirm('Подтверждаете удаление?');
}
</script>
</body>
При нажатии на кнопку появляется окно подтверждения действий. При нажатии на кнопку "OK" происходит отправка страницы на сервер и вызов метода Mybtn_Click. При отмене, ничего не происходит – окно сворачивается и страница продолжает пребывать в браузере.
В данном простом случае вообще нет смысла регистрировать клиентскую функцию, можно применить следующую запись:
<asp:Button ID="Button1" runat="server" onclick="Mybtn_Click"
onclientclick="javascript:
return confirm('Сохранить настройки?');"
Text="Удалить запись" />