0

以下の ASP.NET MVC2 コードで、コントローラーの作成応答に「Test」というメッセージが表示される場合。

モノのメッセージは作成ビューに表示されません。

メッセージは、作成後に呼び出される次の応答に表示されます。

ASP.NET のように同じリクエストで TempData 値を表示するために Mono をドースする方法は?

[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>
4

1 に答える 1

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、ビューモデルを使用し、ビューをこのビューモデルに強く型付けすることをお勧めします。

于 2012-10-16T16:46:46.483 に答える