视图未在控制器调用时重建
本文关键字:重建 调用 控制器 视图 | 更新日期: 2023-09-27 18:33:20
查看:
@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);
}
如果我的开始是事件活动 = 真;
FullEvent View 在某个时刻调用我的 JS 方法,该方法触发对 UpdateUserEventInformation 的 ajax 调用。
所以,基本上应该发生的事情是,当控制器方法UpdateUserEventInfo被触发时,它会更新数据库,然后再次调用我的索引视图。索引视图将重新生成模型并启动视图。该视图检查 IsEventActive 并基于此构建div。
该页面在开始时显示 GameEvent Div,因为 IsEventActive 为 true,但是当索引视图通过 ajax 调用再次重建时。if-else 循环正确遵循并转到 GameNonEventdiv 并创建它。但我在页面上没有看到这一点。该页面仍显示 GamEvent Div。即使视图没有进入 if 语句。
如果我刷新页面,那么它会正确显示。
将视图的一部分包装在另一个容器中:
@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);
}
如果我
的代码正确,看起来你没有对 ajax 调用"游戏/更新用户事件信息"的结果做任何事情,所以什么都不会发生。在注释掉"成功"的地方,您应该有更新客户端的代码。这可能是很多代码,那里甚至可能不需要 ajax 调用,href to action 从功能点来看会做得很好。简单的方法要解决此问题(因为您说页面刷新有效)是在 Ajax 成功时重新加载页面:
$.ajax({
type: "POST",
url: "Game/UpdateUserEventInfo"
success: function () {
window.location.reload();
}
});
但这也会成功地取消使用 Ajax 的全部意义,您可能需要为此复习您的方法。