signalR を使用してチャット アプリを作成しました。これは、チャットを実行するマークアップと JavaScript を含む ASCX コントロールです。ユーザー コントロールを保持するページには、非同期で表示される updatepanel があり、ユーザーは入力されたコードに固有のコンテンツを更新できます。問題は、更新ボタンを何度でもクリックでき、ページが問題なく動作することです。クリックしてチャットに接続し (これはすべて JavaScript で構築されています)、更新ボタンを数回クリックすると、正常に動作しているように見えますが、突然ページが停止し、いくつかのビューステート エラーがログに記録され、「状態情報が無効です」と表示されます。ページが破損している可能性があります。無効なビュー ステート.. 何とか... 見苦しいエラーです。
これは、ハブに接続したときにのみ発生します。接続を開始しないと、これは決して起こりません。
ただし、コントロールの背後にあるコードは、後でマークアップに書き込まれるビューステートを参照するプロパティに値を格納します (すべてのポストバックでページ ブレーキがかかるビューステートに値を格納しません)。誰が会話に参加すべきかをチャットします。
助けてください。
ここにいくつかのコード:
StandAlonePanel.aspx -> 更新ボタンのある updatepanel が含まれています。ChatControl.ascx ->
public int userId{
get
{
if (ViewState["UserID"] == null)
ViewState["UserID"] = 0;
return Convert.ToInt32(ViewState["UserID"]);
}
set
{
ViewState["UserID"] = value;
}
}
//--- Same for userName
if (userId == 0 && CurrentUserSession.User != null)
{
this.userId = CurrentUserSession.User.Id;
this.userName = CurrentUserSession.User.Name;
}
マークアップで
var userInfo = {
userId : "<%= userId %>",
userName : "<%= userName %>",
IsAnonymized: "<%= IsAnonymized %>",
enableLogging: "<%= enableLogging %>"
}
if (chat != null) {
chat.Disconnect();
}
chat = new Chat(userInfo);
chat.Connect();
//-- スクリプト conn
var hubConn = $.hubConnection(url);
hubConn.logging = self.enableLogging
hubConn.qs = { 'u': userInfo.userId, 'tc': '0', 'oo': userInfo.showOnlineOnly, 'ach': self.IsAnonymized, 'lgch': self.enableLogging }; /* Initiating queryString */
hubConn.error(function (error) {
logMe(error);
});
var hubProxy = new ChatProxy(hubConn);
/* hook up callbacks to hubProxy */
self.Connect = function () {
if (self.longpolling == true) {
hubConn.start({ transport: 'longPolling' }).done(function (result) {
///--
}).fail(function (error) {
///--
alert("error" + error);
});
}
else {
hubConn.start().done(function (result) {
///--
}).fail(function (error) {
///--
alert("error" + error);
});
}
}