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 视图在某个时刻调用我的 JS 方法,该方法触发了对 UpdateUserEventInfo 的 ajax 调用。

所以,基本上应该发生的是当控制器方法 UpdateUserEventInfo 被触发时,它会更新数据库,然后再次调用我的索引视图。索引视图重建模型并启动视图。该视图检查 IsEventActive 并基于此构建 div。

该页面在开始时显示 GameEvent Div,因为 IsEventActive 为 true,但是当索引视图通过 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 回答