直截了当的问题,似乎无法让我的viewBag值显示在用户完成表单后指向的 View 中。
请指教..谢谢
我的Index ActionResult简单返回模型数据。
public ActionResult Index()
{
var source = _repository.GetByUserID(_applicationUser.ID);
var model = new RefModel
{
test1 = source.test1,
};
return View(model);
}
“我的获取编辑” ActionResult,仅使用与Index相同的模型数据。
我的帖子“编辑” ActionResult,将新值(如果有)分配给模型,然后重定向到“索引”页面,但是“索引”页面不显示ViewBag值。
[HttpPost]
public ActionResult Edit(RefModell model)
{
if (ModelState.IsValid)
{
var source = _repository.GetByUserID(_applicationUser.ID);
if (source == null) return View(model);
source.test1 = model.test1;
_uow.SaveChanges();
@ViewBag.Message = "Profile Updated Successfully";
return RedirectToAction("Index");
}
return View(model);
}
在我的索引 View 中...
@if(@ViewBag.Message != null)
{
<div>
<button type="button">@ViewBag.Message</button>
</div>
}
最佳答案
ViewBag仅适用于当前请求。在您的情况下,您将进行重定向,因此您可能已存储在ViewBag中的所有内容都会随着当前请求一起消失。仅在渲染 View 时才使用ViewBag,而在打算重定向时不使用。
使用TempData
代替:
TempData["Message"] = "Profile Updated Successfully";
return RedirectToAction("Index");
然后您认为:
@if (TempData["Message"] != null)
{
<div>
<button type="button">@TempData["Message"]</button>
</div>
}
在后台,TempData将使用Session,但一旦您从记录中读取,它将自动将其逐出。因此,它基本上用于短暂的一重定向持久性存储。
或者,如果您不想依赖 session ,则可以将其作为查询字符串参数传递(这可能是我要做的)。
关于c# - 为什么viewbag的值不传递回 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19294975/