如何强制Mono MVC3应用程序在当前响应中显示TempData

时间:2012-10-16 16:29:50

标签: c# asp.net asp.net-mvc asp.net-mvc-2 mono

如果下面的ASP.NET MVC2代码在Create controller response中显示消息“Test”。

在“单声道”消息中,“创建”视图中不显示apper。

消息出现在创建后调用的下一个响应中。

如何让Mono在ASP.NET中显示同一请求中的TempData值?

[HttpPost]
public RedirectToRouteResult Create()
{
 TempData["Message"] = "Test";
 return RedirectToAction("Index");
}


public ActionResult Index() {
  return View();
  }

的Site.Master:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <script src="<%= Url.Content("~/Scripts/jquery/jquery-1.7.1.js")%>" type="text/javascript"></script>

 <% if (TempData["Message"]!=null) {
        %>
    $(function() {
        setTimeout( function() {
           showMessage ( '<%= TempData["Message"] as string %>');
           }, 300 );
      });
        <% } %>
    </script>
</head>

1 个答案:

答案 0 :(得分:1)

我建议您在控制器操作中使用TempData值,而不是在视图中使用

[HttpPost]
public ActionResult Create()
{
    TempData["Message"] = "Test";
    return RedirectToAction("Index");
}

public ActionResult Index() 
{
    ViewData["Message"] = TempData["Message"];
    return View();
}

并在视图中:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <script src="<%= Url.Content("~/Scripts/jquery/jquery-1.7.1.js")%>" type="text/javascript"></script>

    <% if (ViewData["Message"] != null) { %>
        $(function() {
            window.setTimeout(function() {
                showMessage (<%= new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewData["Message"]) %>);
            }, 300);
        });
    <% } %>
    </script>
</head>

顺便说一句,我建议您使用视图模型而不是使用ViewData,并将视图强烈输入此视图模型。