Ich arbeite an einem VB.NET-Webformular-Projekt, und ich versuche, Ajax zu verwenden, um eine Funktion aufzurufen, die ein Objekt dann in HTML zurückgeben würde.Ajax-Funktion gibt zurück "Anforderung ist in diesem Kontext nicht verfügbar"
Hier ist meine Ajax-Aufruf:
$(document).ready(function() {
msgClickedClass.click(function (event) {
msgID = event.target.id;
//Get message body
$.ajax({
type: "POST",
url: "/secure/PortalMessages.aspx/PrintMessageContent",
data: JSON.stringify({ "msgID": msgID }),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
// $("#dialogText").html(data.d.message);
alert("success");
},
error: function (xhr, status, error) {
alert('Error: ' + status + '\nError Text: ' + error);
}
}) //end ajax
}); //end click function
});
Hier ist Funktion mein vb von Ajax aufgerufen wird:
<WebMethod()> _
Public Shared Function PrintMessageContent(msgID As Integer) As Messages
Dim msg As New Messages
Dim db As New DB_SQL()
msg = db.GetSpecificMessageSent(msgID)
Return msg
End Function
Wenn ich den Code debuggen, ich ein Nachrichten tun haben Objekt, das zurückgegeben werden soll , aber die Ajax-Funktion schlägt fehl und gibt stattdessen einen 500-Fehler zurück, der besagt, dass "Anforderung in diesem Kontext nicht verfügbar ist".
Wenn ich meine PrintMessageContent ändern, um eine Zeichenfolge anstelle eines Objekts zurückzugeben, ist die Ajax-Funktion erfolgreich.
Alle Vorschläge würden sehr geschätzt werden.
Update: Hier ist, was meine Nachrichten Klasse sieht aus wie
Public Class Messages
Private _TimeStamp As DateTime
Private _Subject As String
Private _Message As String
Private _Agent As String
Private _Id As Integer
Private _MessageViewHistory As List(Of MessagesViewed)
Public Property TimeStamp() As DateTime
Get
Return _TimeStamp
End Get
Set(value As DateTime)
_TimeStamp = value
End Set
End Property
Public Property Subject() As String
Get
Return _Subject
End Get
Set(value As String)
_Subject = value
End Set
End Property
Public Property Message() As String
Get
Return _Message
End Get
Set(value As String)
_Message = value
End Set
End Property
Public Property Agent() As String
Get
Return _Agent
End Get
Set(value As String)
_Agent = value
End Set
End Property
Public Property Id() As Integer
Get
Return _Id
End Get
Set(value As Integer)
_Id = value
End Set
End Property
Public Property MessageViews() As List(Of MessagesViewed)
Get
Return _MessageViewHistory
End Get
Set(value As List(Of MessagesViewed))
_MessageViewHistory = value
End Set
End Property
Public Property MessageHTMLFormat() As String
Get
Dim retn As String
retn = Me.Message.Replace(vbCrLf, "<br />")
Return retn
End Get
Set(value As String)
End Set
End Property
End Class
Update # 2: Neue Funktion:
<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Shared Function PrintMessageContent(msgID As Integer) As String
Dim msg As New Messages
Dim db As New DB_SQL()
msg = db.GetSpecificMessageSent(msgID)
Dim serializer As New JavaScriptSerializer()
Dim serializedResult = serializer.Serialize(msg)
Return serializedResult
End Function
Was ist "Nachrichten"? Um den Wert von webmethod zu erhalten, gibt es ein json-Objekt zurück. Sie sollten dies durch "data.d" -Eigenschaft erhalten ... Auch versuchen, 'Daten: JSON ...' ** zu ** 'Daten: '{msgID:' + JSON.stringify (msgID) + '}'' zu ändern – Codexer
@Zaggler, ich habe versucht, mit 'data.d' auf den Wert zuzugreifen, aber die Erfolgsfunktion wird nie aufgerufen. Ich habe auch 'Daten: JSON ...' geändert, wie Sie vorgeschlagen haben, aber ich bekomme immer noch die gleiche Fehlermeldung. Ich habe meine Frage auch aktualisiert, um die Nachrichtenklasse einzuschließen. – bongo700
Es ist möglich, dass 'db.GetSpecificMessageSent (msgID)' nichts zurückgibt oder etwas tatsächlich fehlschlägt, 'Nachrichten' zurück zu liefern ... Wenn Sie den gesamten Code innerhalb der Methode auskommentieren und einfach' Return msg. ToString() 'und dann den Rückgabetyp in' String' ändern, erhalten Sie die Nachrichten-ID zurück? – Codexer