2012-10-16 44 views
0

如果下面的ASP.NET MVC2代碼在創建控制器響應中顯示消息「Test」。如何強制Mono MVC3應用程序在當前響應中顯示TempData

單聲道消息不會在創建視圖中出現。

消息出現在創建後調用的下一個響應中。

如何使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

我建議你消耗控制器動作內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,我會推薦你​​使用視圖模型,並讓你的視圖強制輸入到這個視圖模型。

+0

showMessage是Site.Master的一部分。這是所有頁面使用的通用消息顯示方法。如何創建Site.Master的強類型視圖? – Andrus

相關問題