TempData不显示成功消息Asp.net MVC

时间:2017-11-14 17:19:50

标签: asp.net-mvc

我使用tempdata为用户提供成功消息"然而,在重定向之前它只是重定向而不给出消息。也许我把它放在错误的地方,我尝试将它移到代码的不同部分,但它仍然没有用。

索引视图

    @{
    ViewBag.Title = "Home Page";
}
@if (TempData["notice"] != null)
{
    <p>@TempData["notice"]</p>
}


<div>
    <img src="~/Content/Images/TWO_Logo.jpg" alt="Logo" />
</div>
<div class="jumbotron">    
    <h1></h1>
    <p class="lead">
</div>

家庭控制器

namespace com.twcl.it.isms.Controllers
{
    [Authorize(Roles = "Administrator, Issue, Transaction_Edit, Print")]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
TempData["notice"] = "Your item(s) successfully requested";
            ViewBag.SuccessMessage = TempData["SuccesMeassge"];

            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }

        public ActionResult Logoff()
        {
            HttpContext.Session.Abandon();
            Response.Redirect("http://192.168.5.127");
            //Response.StatusCode = 401;
            //Response.End();
            //////throw new HttpException(401, "Please close your browser to complete Log Off");
            return View("Index");
        }

2 个答案:

答案 0 :(得分:0)

在Index Action方法中,只需添加TempData.Keep("notice");,这将使tempdata可用于下一跳。

public ActionResult Index()
{
    TempData.Keep("notice");
    ViewBag.SuccessMessage = TempData["SuccesMeassge"];
    return View();
}
  

在视图上显示警告消息

@if (TempData.ContainsKey("notice"))
{
    <script type="text/javascript">
        alert(@TempData["notice"]);
  </script>
}

有关保持和窥视的详细信息。 when-to-use-keep-vs-peek-in-asp-net-mvc

答案 1 :(得分:0)

如果从操作方法返回RedirectResponse,它将向浏览器发送302响应,并将位置标头设置为您要重定向到的URL,浏览器向该URL发出新的GET请求。在新的GET请求之前,您将无法显示警报。

您可以做的是,在重定向呈现的页面中显示警报消息。

[HttpPost]
public ActionResult Save(SomeViewmodel model)
{
   TempData["Msg"] = "Some message";
   return RedirectToAction("Index");
}

现在,在Index操作返回的视图中,您可以直接访问TempData。无需在索引操作中再次通过ViewBag读取并传递它。

<script>
    var msg = '@TempData["Msg"]';
    if (msg.length) {
        alert(msg);
    }
</script>