Asp.net MVC ViewData未在视图中渲染
在我的post-action方法中有以下代码可供编辑Asp.net MVC ViewData未在视图中渲染,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,在我的post-action方法中有以下代码可供编辑 JobCardService.Update(viewData.JobCard); var js = new JavaScriptSerializer(); ViewData["Notifications"] = js.Serialize(new {NoteificationType = "Success", Message = "The installtion was s
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为null/空,即此客户端代码
var notifications = eval("<%= ViewData["Notifications"]%>");
我肯定我做错了一些小错误。ProfK-我认为(你肯定知道),一旦通过重定向进入索引视图,你就必须用javascript解析json结果。jquery.getJson()方法似乎最合适:
此外,在执行重定向操作时,ViewData的上下文也将丢失。在这种情况下,您希望使用TempData作为替代品。以下是您可以尝试的示例:
吉姆
[编辑]-不确定这是否可行:
// in the controller
TempData["Notifications"] = js.Serialize(...);
// in the index view
function getMyJsondata() {
var json = $.getJson('<%=ViewContext.TempData["Notifications"] %>');
}
//在控制器中
TempData[“通知”]=js.Serialize(…);
//在索引视图中
函数getMyJsondata(){
var json=$.getJson(“”);
}
或者根据您对问题的修正,尝试以下方法:
// alternative in index view
eval("(" + "<%= TempData['Notifications']%>" + ")");
//索引视图中的备选方案
评估(“+”);
试试看
阿登杜姆:
引用之前关于Tempdata与ViewData的SO问题:
TempData用于在服务器之间共享数据
控制器动作。如果你的控制器
执行重定向操作和目标
行动需要数据(可能是数据)
特定模型实例)以执行操作
之后,您可以将此数据存储在
临时数据。使用TempData类似于
将其存储在会话中,但仅限于
往返一次。您可以使用TempData
当您需要将数据传递给另一个
控制器操作而不是视图
用于渲染
我很困惑,为什么在Ajax调用中有重定向操作?它不是Ajax调用。我不是在整个响应中使用JSON,我只是想将它添加到响应中。eval需要“填充”才能工作。试试这个:eval(“+”);还要注意的是,您没有正确地转义字符串,双引号中包含的任何内容都应该用单引号括起来;甚至连一个坏掉的评估都没有。它甚至无法尝试eval'ing。谢谢@jim,但我的问题是现在ViewData根本没有出现在client.ProfK上-尝试使用TempData(以同样的方式),而不是ViewData。TempData基于会话,而ViewData链接到该控制器操作(即编辑操作),谢谢,但是TempData给了我同样的问题。我已经为BaseViewData键入了母版页,并将通知集合移动到该类。稍后我将重新检查TempData,但现在一切正常。
// alternative in index view
eval("(" + "<%= TempData['Notifications']%>" + ")");