视图未在控制器调用上重建

时间:2013-10-01 00:48:19

标签: c# asp.net-mvc

查看:

@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调用。

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

该页面在开头显示了GameEvent Div,因为IsEventActive为true,但是当索引视图通过ajax调用再次重建时。 if-else循环正确跟随并转到GameNonEvent div并创建它。但我没有在页面上看到这一点。该页面仍显示GamEvent Div。即使视图没有进入if语句。

如果我刷新页面,则显示正确。

2 个答案:

答案 0 :(得分: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的{​​{1}}处理程序中,调用:

ajax

答案 1 :(得分:1)

如果我的代码正确,看起来你没有对ajax调用“Game / UpdateUserEventInfo”的结果做任何事情, 所以一切都不会发生。如果您已将“成功”注释掉,那么您应该拥有更新视图客户端的代码。这可能是很多代码,有可能在那里甚至不需要ajax调用,href to action在功能点上会做得很好。简单的方法 解决这个问题(因为你说页面刷新工作)将是一个页面重新加载ajax成功:

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

但这也会成功取消使用ajax的全部内容,您可能需要检查一下这种方法。