Настройка js для выполнения с сервера в приложении ASP.NET - PullRequest
1 голос
/ 28 апреля 2011

Я работаю над приложением asp.net. Используется много UpdatePanels. Есть ли какой-либо «лучший метод» для установки некоторых js-скриптов для выполнения после обновления updatePanel. (Важно: js-скрипты не являются статичными - например, я обрабатываю исключение в своем коде на стороне сервера, и мне нужно, чтобы пользователь знал об этом исключении после обновления updatePanel, например)

В настоящее время я использую следующее решение:

<asp:Hidden id="scriptsHiddenField" runat="server" />

На стороне сервера я передаю такие сценарии:

catch (Exception exception) {
   scriptsHiddenField.Value += String.Format("alert('Oops! Error occured: {0}');", exception.Message);
}

И я оцениваю сценарии для события endRequest следующим образом:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

function endRequestHandler(sender, args) {
    eval($('#<%= scriptsHiddenField.ClientID %>').val());
    $('#<%= scriptsHiddenField.ClientID %>').val('');
}

Это просто упрощенный пример, так что в основном это не только обработка ошибок, которая должна работать именно так. Обычно сценарии, передаваемые с сервера, являются более сложными, поэтому у меня плохое предчувствие относительно оценки js таким образом.

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Мы делаем что-то подобное все время.Вот функция, которая вызывает предупреждение javascript при обновлении панели обновления.

public static void ShowInUpdatePanel(string message, UpdatePanel up)
{
    //Cleans the message to allow single quotation marks
    string cleanMessage = message.Replace("'", "\\'");
    string script = "<script type='text/javascript'>alert('" + cleanMessage + "');</script>";
    ScriptManager.RegisterStartupScript(up, up.GetType(), "alert" + DateTime.Now.Millisecond.ToString(), script, false);

}
1 голос
/ 28 апреля 2011

вы пытались зарегистрировать скрипт запуска, который будет запускаться после обновления?

catch (Exception exception)
{
      ScriptManager.RegisterStartupScript(this, this.Page.GetType(), "errkey", "alert('Oops! Error occured: " + exception.Message + "');", true);
}
1 голос
/ 28 апреля 2011
ScriptManager.RegisterStartupScript(this, GetType(), "somenameyouwanttouse", "alert('xyz');", true);

Редактировать: последний параметр определяет, хотите ли вы автоматически выдавать тег SCRIPT.Забыл в моем первоначальном ответе.

Кроме того, ClientScript.RegisterStartupScript аналогичен, но не запускается после каждой асинхронной обратной передачи (только первой), если я не ошибаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...