Asp.net MVC ViewData未在视图中渲染

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

在我的post-action方法中有以下代码可供编辑

            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']%>" + ")");