Регистрация JavaScript при асинхронной обратной передаче
У меня есть кнопка asp.net, обернутая внутри UpdatePanel, и при нажатии она выполняет асинхронную обратную передачу и регистрирует некоторый javascript, который показывает диалог jquery.
protected void btnAddData(object sender, EventArgs e) {
StringBuilder jqueryDialog = new StringBuilder();
jqueryDialog.Append("$(document).ready(function() {");
jqueryDialog.Append("RefreshData();");
jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });");
jqueryDialog.Append("});");
ScriptManager sm = ScriptManager.GetCurrent(this);
if (sm != null && sm.IsInAsyncPostBack) {
ScriptManager.RegisterClientScriptBlock(
this, typeof(Page), Guid.NewGuid().ToString(),
jqueryDialog.ToString(), true);
}
}
Как вы можете видеть, javascript сначала вызывает функцию с именем RefreshData(), которая существует в моей разметке как javascript.
<script type="text/javascript" language="javascript">
if ($) {
$(document).ready(function () {
function RefreshData() {
alert("Data Refreshed!");
}
});
}
</script>
Однако Firefox выдает ошибку, которая говорит, что RefreshData не определен. Означает ли это, что любой JavaScript, который я регистрирую при асинхронной обратной передаче, не сможет использовать функции JavaScript, которые я определил в моей разметке?
Спасибо за помощь.
1 ответ
Не определяйте RefreshData
функция внутри функции document.ready, которая является анонимным обратным вызовом. Определите его снаружи, чтобы он был доступен снаружи:
<script type="text/javascript">
if (typeof($) != 'undefined') {
function RefreshData() {
alert("Data Refreshed!");
}
}
</script>
Также вам, вероятно, не нужно оборачивать документ. Уже на вашей стороне сервера есть:
StringBuilder jqueryDialog = new StringBuilder();
jqueryDialog.Append("RefreshData();");
jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });");