0

サーバーに対して行う get 要求の数を減らそうとしています。$.get3 つの個別のサーバー コールバックを使用する代わりに、一度に 3 つを返すことができるように、部分ビューを文字列としてメソッドに返したいと思います。とにかくこれを行うにはありますか。これまでのところ私は持っています

これまでのところ、 System.Web.Mvc.PartialViewResult を返すだけです

function updateChat() {

/** I want to make this work so I only have 1 callback */
$.get("Home/refreshChatParts", {}, function (response) {
    var html = response.split(",");
    $("#chatWindow").replaceWith(html[0]);
    $("#chatHeader").replaceWith(html[1]);
    $("#playerList").replaceWith(html[2]);
});

/**  this stuff works, but is a lot of call backs */
$.get("Home/refreshChatText", {}, function (html) {
    $("#chatWindow").replaceWith(html);
});

$.get("Home/refreshChatHeader", {}, function (html) {
    $("#chatHeader").replaceWith(html);
});

$.get("Home/refreshPlayerList", {}, function (html) {
    $("#playerList").replaceWith(html);
});
*/
$.get("Home/getRequest", {}, function (requestUser) {
    if (requestUser.toString() != "failed") {
        pause = true;
        var join = confirm(requestUser + " would like to play a game with you");
        if (join) {
            startGame(requestUser);
        } else
            pause = false;
        resetRequestUser(requestUser);
    }
});

//$.get("Home/checkForGameStart", {}, function (response) { /*alert(response);*/ });

scrollChatDown();

setTimeout('updateChat()', 20000);
}




 public String refreshChatParts() {

        //refresh chat text
        ViewData["ChatText"] = getFormatedChatText();

        //refresh usercount
        try {
            userCount = getUserCount();
            ViewData["numberOfUsers"] = "There are " + userCount + " players online";
        } catch (Exception e) { ViewData["numberOfUsers"] = e.Message; }

        //refresh player list
        ViewData["listOfPlayers"] = getFormatedPlayerList();

        checkForGameStart();

        return PartialView("ChatText") + "," + PartialView("ChatHeader") + "," + PartialView("playerList");
    }
4

1 に答える 1

0

メソッド「PartialView」はタイプ「System.Web.Mvc.PartialViewResult」を返すため、そのメソッドの戻り結果を連結しようとすると、オブジェクトの ToString が呼び出されます。オーバーライドされていない場合は、単にタイプ名を返します。

したがって、このアプローチはその理由で機能しません。やりたいことは、アクションの戻り値の型を PartialViewResult としてマークすることです。

次に、返される 3 つの部分ビューを単純に書き出す部分ビューを定義します。

次のように新しいパーシャルを定義すると:

@{ Html.RenderPartial("ChatText"); } ,
@{ Html.RenderPartial("ChatHeader"); } ,
@{ Html.RenderPartial("playerList"); } 

そして、そのパーシャルを返すと、目的のものを取得する必要があります。

于 2012-05-27T04:01:41.127 に答える