gpt4 book ai didi

c# - TempData、ViewBag,没有任何作用

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:49 26 4
gpt4 key购买 nike

我正在尝试将成功消息从我的 Controller 操作传递到 View 。但是,我尝试或遇到 googleing 的任何解决方案似乎都不起作用。经过一个小时试图找出我做错了什么,我会在这里问。

在示例中,我使用了 ViewBag,但我尝试使用 TempDate["MyMessage"] = "Some message";仍然相同.. View 中的值始终为 null...

Controller

    public ActionResult EditSupplier(Supplier supplier)
{
try
{
if (ModelState.IsValid)
{
this._service.Update(supplier);
ViewBag.UserMessage = "Supplier updated successfully";

}
}
catch (Exception ex)
{
ModelState.AddModelError(String.Empty, ex.Message);
TempData["UserMessage"] = "Error, supplier couldn't be updated";
return View("Error");
}
return RedirectToAction("Supplier", new { id = supplier.SupplierId });
}

查看

@if (ViewBag.UserMessage != null)
{
<p>@ViewBag.UserMessage.ToString()</p>
}

最佳答案

RedirectToAction 调用中,您通过向客户端浏览器发送“重定向”状态来使其重定向。一旦您返回该状态并结束您的响应,您的本地状态就会丢失 - 它不会持续到下一个请求。您需要另一种“方式”来保留该信息,例如重定向到 SupplierEditSuccess,这将是一个假定编辑成功的 View ,或者传递 Success Supplier 的参数表示上次编辑成功并显示相应的消息。

但是,在您的异常捕获中,您应该能够在 View 中看到 TempData,因此如果您故意在 this._service.Update(supplier); 那么您应该能够访问 TempData["UserMessage"] 中的消息。

编辑 我在对 "storing a js value from 1 ActionResult to use in another ActionResult" 的回答中写了很多关于在操作结果之间传递数据的内容,而在我对 "Is ViewBag and ViewData also part of state management in asp.net mvc?" 的回答中写得不那么直接,这可能会帮助您为您的场景创建合适的解决方案。

关于c# - TempData、ViewBag,没有任何作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19912665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com