-1

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);
        });
    }
}
4

1 に答える 1