直截了当的问题,似乎无法让我的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/

10-13 01:51