我在编辑的帖子操作方法中有以下代码。
JobCardService.Update(viewData.JobCard);
var js = new JavaScriptSerializer();
ViewData["Notifications"] = js.Serialize(new {NoteificationType = "Success", Message = "The installtion was successfully updated"});
return RedirectToAction("Index");
但是,在客户端上,ViewData为空/空,即此客户端代码
var notifications = eval("<%= ViewData["Notifications"]%>");
呈现为
var notifications = eval("");
我确定我做错了。
答案 0 :(得分:0)
ProfK - 我认为(你毫无疑问会注意到)一旦你通过重定向进入你的索引视图,你将不得不在javascript中解析json结果。 jquery .getJson()方法似乎最合适:http://api.jquery.com/jQuery.getJSON/
此外,当您正在执行RedirectToAction时,ViewData的上下文将会丢失。在这种情况下,您希望将TempData用作替代品。以下是您可以尝试的示例:
吉姆
[edit] - 不确定这是否有效:
// in the controller
TempData["Notifications"] = js.Serialize(...);
// in the index view
function getMyJsondata() {
var json = $.getJson('<%=ViewContext.TempData["Notifications"] %>');
}
或根据您对问题的修正,试试这个:
// alternative in index view
eval("(" + "<%= TempData['Notifications']%>" + ")");
试一试......
adendum: 引用之前关于Tempdata vs ViewData的SO问题:What is TempData collection used for in asp.net MVC?
TempData用于在两者之间共享数据 控制器动作。如果你的控制器 做一个RedirectToAction和目标 行动需要数据(也许是一个 行动的特定模型实例 在,你可以存储这些数据 TempData的。使用TempData类似于 将其存储在会话中,但仅限于 一次往返。您使用TempData 何时需要将数据传递给另一个 控制器动作而不是视图 用于渲染。