Мой DiaryHub.vb имеет следующее:Вызов функции SignalR Javascript из модального всплывающего окна
Imports Microsoft.AspNet.SignalR
Imports Microsoft.AspNet.SignalR.Hubs
Namespace UIS
<HubName("DiaryHub")>
Public Class DiaryHub
Inherits Hub
Public Sub PostDiaryHeadline()
' Call the addNewMessageToPage method to update clients.
Clients.All.addNewDiaryHeadlineToPage()
End Sub
End Class
End Namespace
Мое окно Главная/Индекс имеет следующий код для инициирования/настройки SignalR.
$(function() {
// Save the reference to the SignalR hub
var dHub = $.connection.DiaryHub;
// Invoke the function to be called back from the server
// when changes are detected
// Create a function that the hub can call back to display new diary Headline entry.
dHub.client.addNewDiaryHeadlineToPage = function() {
// refresh the Headline Entries to the page.
outputHLDiaryEntries();
};
// Start the SignalR client-side listener
$.connection.hub.start().done(function() {
// Do here any initialization work you may need
outputHLDiaryEntries();
});
})
Код работает и при запуске отображаются записи дневника дневного света.
У меня также есть кнопка, которая открывает окно Кендо как модальный с формой для добавления новых записей дневника с помощью этой функции:
function openAddWindow() {
var addWindow = $("#window").data("kendoWindow");
addWindow.refresh({
url: "Home/AddDiaryEntry/"
});
addWindow.open();
addWindow.center();
}
Я тогда следующий Javascript в моей странице AddDiaryEntry:
function createDiaryEntry() {
var validFlag = true;
var errorMsg = "";
//Validate New Diary Entry
// removed for brevity...
if (validFlag) {
//data is valid
//get value of checkbox
var cbValue = ($("#addNew_dHeadline").is(':checked')) ? true : false;
//clear error area
$('#errorArea').html("");
var response = ''
$.ajax({
url: 'Home/SaveDiaryEntry',
type: 'POST',
data: {
dDate: $("#addNew_dDate").text(),
dCreatedBy: $("#addNew_dCreatedBy").text(),
dName: '@AppShort',
dTeam: teamValue.value(),
dType: typeValue.value(),
dRef: $("#addNew_dREF").val(),
dHeadline: cbValue,
dServer: multiSelect.value(),
dComment: editor.value()
},
success: function (result) {
response = result;
alert(response);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
response = "err--" + XMLHttpRequest.status + " -- " + XMLHttpRequest.statusText + " -- " + errorThrown;
alert(response);
}
});
//close window
var addWindow = $("#window").data("kendoWindow");
addWindow.close();
//if headline entry call SignalR post function to refresh diary entries
if (cbValue) {
// reference to the SignalR hub
var dHub = $.connection.DiaryHub;
// function to update all clients
dHub.client.PostDiaryHeadline(); //THIS IS A FUNCTION IN DiaryHub.vb
}
} else {
//error in data
var out = '<ul class="error">' + errorMsg + '</ul>';
// display errors
$('#errorArea').html(out);
}
}
Код работает нормально - проверяет данные, сохраняет данные в базе данных. Проблема, с которой я сталкиваюсь, заключается в попытке вызвать dHub.client.PostDiaryHeadline()
для вызова функции SignalR. Я получаю сообщение об ошибке: JavaScript runtime error: Object doesn't support property or method 'PostDiaryHeadline'
Как я могу назвать функцию? Должен ли я вызвать функцию до закрытия модального окна?
не было бы: dHub.server.PostDiaryHeadline(); ? –
@TezWingfield Попробовал ваше предложение и получил ту же ошибку. Объект не поддерживает свойство или метод – Mych
Позвольте мне исправить свой ответ, и я вернусь к вам. –