MVC ViewData无法在View中呈现

时间:2010-07-16 08:18:01

标签: asp.net asp.net-mvc

我在编辑的帖子操作方法中有以下代码。

            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("");

我确定我做错了。

1 个答案:

答案 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   何时需要将数据传递给另一个   控制器动作而不是视图   用于渲染。