我正在尝试将成功消息从Controller操作传递到View。 但是,我尝试或遇到谷歌的任何解决方案似乎都不起作用。经过一个小时试图找出我做错了什么,我会在这里问。
在exampel中我使用ViewBag,但我尝试过使用TempDate [“MyMessage”] =“一些消息”;仍然相同..在View ...中值始终为null
控制器
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>
}
答案 0 :(得分:1)
在RedirectToAction
调用中,您通过向客户端浏览器发送“重定向”状态来重定向。一旦您返回该状态并结束您的响应,您的本地状态就会丢失 - 它不会持续到下一个请求。您需要另一种“方式”来保留该信息,例如重定向到SupplierEditSuccess
,这将是一个假定编辑成功的视图,或者将Success
参数传递给Supplier
}表示上次编辑成功并相应地显示消息。
但是,在异常catch中,您应该能够在视图中看到TempData
,因此如果您在this._service.Update(supplier);
之后故意抛出异常,那么您应该能够在TempData["UserMessage"]
中访问该消息{1}}。
编辑我写了很多关于在"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?"的回答中写的数据,这可能有助于您创建合适的内容您的方案的解决方案。