У меня есть страница в одном из моих приложений ASP.NET(VB), которая полагается на сторонний сервис, который живет, и я использую jQuery для отображения наложения, если эта служба окажется недоступной. Я использовал тот же подход для других предупреждений в приложении - разница в этом заключается в том, что он должен перенаправляться после того, как пользователь нажимает кнопку во всплывающем окне предупреждения, чтобы удалить оверлей. По какой-то причине я получаю сообщение об ошибке "Ошибка: значение свойства" warn_redirect "имеет значение null или undefined, а не объект Function".
Любая помощь очень ценится! Мой код:
JQuery
function warn_redirect(msg, title, nextpage) {
// show modal div
//alert(obj.id);
$("html").css("overflow", "hidden");
$("body").append("<div id='popup_overlay'></div><div id='popup_window'></div>");
$("#popup_overlay").addClass("popup_overlayBG");
$("#popup_overlay").fadeIn("slow");
// build warning box
$("#popup_window").append("<h1>" + title + "</h1>");
$("#popup_window").append("<p id='popup_message'><center>" + msg + "</center></p>");
$("#popup_window").append("<div class='buttons'><center><button id='continue' class='positive' type='submit'>OK</button></center></div>");
// attach action to button
$("#continue").click(popup_remove_redirect(nextpage));
// display warning window
popup_position(400, 300);
$("#popup_window").css({ display: "block" }); //for safari using css instead of show
$("#continue").focus();
$("#continue").blur();
}
function popup_remove_redirect(nextpage) {
$("#popup_window").fadeOut("fast", function () { $('#popup_window,#popup_overlay').trigger("unload").unbind().remove(); });
$("body", "html").css({ height: "auto", width: "auto" });
$("html").css("overflow", "");
window.location.href = nextpage;
}
Вот код вызова VB.NET:
If Status = "DOWN" Then
Dim clsUtility As New Utility
clsUtility.Emailer("[email protected]", "[email protected]", "", "", "The Service Is Down!", "Please investigate")
Dim ScriptString As String = "<script language='javascript'>"
ScriptString += "warn_redirect('Some warning message.', 'Warning', 'AnotherPage.aspx');"
ScriptString += "</script>"
ClientScript.RegisterStartupScript(Me.GetType, "warnscript", ScriptString)
'Response.Redirect("AnotherPage.aspx?ID=" & Session("SelKey") & "&UN=" & Header1.UserNumber) //this didn't work either
End If
Это связано с тем, что определение вашего сценария загружается после вызова StartupScript.
Вы должны включить ваш.js файл перед StartupScripts на своей странице. Посмотрите на "исходный код" в своем браузере, и вы увидите кучу скриптовых тегов:
<script src="/ScriptResource.axd?d=eoXLgy ... 847d" type="text/javascript"></script>
Эти теги - это скрипты, вставленные в скрипты StartUp. Убедитесь, что ваш скрипт вставлен перед этим в ваш.aspx (или.master). Возможно, вам придется включить их в главный тег.
Кстати, создавая глобальную функцию, как вы warn_redirect, это не очень хорошая практика. Вы должны, по крайней мере, просуммировать это следующим образом:
window.MyFunctions = {
warn_redirect = function (msg, title, nextpage) { /* your code */ }
}
И назовите это так: MyFunctions.warn_redirect
.
Таким образом, вы лучше организовываете его и избегаете возможных столкновений с другими функциями с тем же именем.
Попробуй это,
If Status = "DOWN" Then
Dim clsUtility As New Utility
clsUtility.Emailer("[email protected]", "[email protected]", "", "", "The Service Is Down!", "Please investigate")
Dim ScriptString As String = "<script language='javascript'>"
ScriptString += "window.onload = function(){warn_redirect('Some warning message.', 'Warning', 'AnotherPage.aspx');};"
ScriptString += "</script>"
ClientScript.RegisterStartupScript(Me.GetType, "warnscript", ScriptString)
'Response.Redirect("AnotherPage.aspx?ID=" & Session("SelKey") & "&UN=" & Header1.UserNumber) //this didn't work either
End If
Поскольку JQuery уже включен, вы также можете использовать приведенный ниже оператор.
ScriptString += "$(function(){warn_redirect('Some warning message.', 'Warning', 'AnotherPage.aspx');});"
RegisterStartupScript
который загружает файл JavaScript. ClientScript.RegisterStartupScript(Me.GetType, "warnscriptfile", "<script src='myfile.js' />")