0

意見:

@if (Model.IsEventActive)
{
    <div id="GameEvent">
        //SomeCode
    </div>
}
else
{
    <div id="GameNonEvent">
        //SomeCode
    </div>
}

JS ファイル:

$('#btnNextEvent').click(function () {
     $.ajax({                
            type: "POST",
            url: "Game/UpdateUserEventInfo"
            //success: function () {
            //    $("#GameEvent").hide();
            //}
        });

});

コントローラ:

[HttpPost]
public ActionResult UpdateUserEventInfo()
{
    var user = _user;
    _instance.Users.UpdateUserEventInfo(user);
    return RedirectToAction("Index");
}

public ActionResult Index()
{
    if (!_instance.Users.CheckUserSkillsExist(WebSecurity.CurrentUserName))
    {
        return RedirectToAction("CreateChar");
    }

    _instance.GameBase.GetBaseData();
    var userModel = GetPlayerDisplayStats();
    return View(userModel);
}

私の始まり IsEventActive = true;

ある時点での FullEvent ビューは、UpdateUserEventInfo への ajax 呼び出しをトリガーする私の JS メソッドを呼び出します。

したがって、基本的には、Controller メソッド UpdateUserEventInfo が起動され、DB が更新されてから、インデックス ビューが再度呼び出されると想定されています。インデックス ビューはモデルを再構築し、ビューを起動します。ビューは IsEventActive をチェックし、それに基づいて div を構築します。

IsEventActive が true であるため、ページには最初に GameEvent Div が表示されますが、インデックス ビューが ajax 呼び出しによって再度再構築されると表示されます。if-else ループは正しく続き、GameNonEvent div に移動して作成します。しかし、私はそれがページに表示されません。ページにはまだ GamEvent Div が表示されます。ビューがifステートメントに入らなかったとしても。

ページを更新すると、正しく表示されます。

4

2 に答える 2

1

表示したビューの一部を別のコンテナーにラップします。

@if (Model.IsEventActive)
{
  <div id="container">
    <div id="GameEvent">
        <div class="col-lg-10 col-lg-offset-1">
            <div class="row">
                @{ Html.RenderAction("FullEvent", "Game", new { ActiveEventGrpId = Model.ActiveEventGrpId }); }
            </div>
        </div>
    </div>
  </div>
}
else
{
    ...
}

次に、呼び出しsuccessのハンドラーで次のようにします。ajax

success: function (data) {
    $("#container").html(data);
}
于 2013-10-01T01:20:47.507 に答える
1

私があなたのコードを正しく取得すると、「Game/UpdateUserEventInfo」への ajax 呼び出しの結果で何もしていないように見えるので、何も起こりません。「成功」がコメントアウトされている場合は、ビュークライアント側を更新するコードが必要です。これは多くのコードになる可能性があり、そこで ajax 呼び出しが不要になる可能性もあります。href to action は機能的な点から問題なく機能します。これを修正する簡単な方法 (ページの更新が機能すると言うため) は、ajax の成功時にページのリロードを行うことです。

 $.ajax({                
        type: "POST",
        url: "Game/UpdateUserEventInfo"
        success: function () {
            window.location.reload();
        }
    });

しかし、これは ajax を使用するポイント全体を正常にキャンセルすることにもなります。これについては、アプローチを見直す必要があるかもしれません。

于 2013-10-01T01:21:08.173 に答える