在ASP中隐藏来自动作的路由值.净MVC

本文关键字:路由 MVC ASP 隐藏 | 更新日期: 2023-09-27 18:16:05

我想使用一个页面显示两种不同的文本基于动作的请求来自,如果这个请求直接来自Index它显示一些欢迎文本,如果它来自Create形式它显示一些其他文本:

public ActionResult Index(bool? ticketSent)
{
    if (ticketSent == true)
        ViewBag.IfcText = "done";
    else
        ViewBag.IfcText = "hello";
    return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "TicketNumber,OwnerName,Email,LaptopModelNumber,Subject,Description,ComplainDate")] Ticket ticket)
{
    if (ModelState.IsValid)
    {
        db.Tickets.Add(ticket);
        db.SaveChanges();
        return RedirectToAction("Index", new { ticketSent = true });
    }
    return View(ticket);
}

但是当请求来自Create动作的Url包含查询字符串,http://localhost:54401/?ticketSent=True,因此,如果用户刷新浏览器,甚至导航到它任何时候,他得到相同的页面,表明表单发送成功,我想确保它被显示后,他创建的表单只有没有查询字符串。

这是视图:

@{if (ViewBag.IfcText == "hello")
    {
        <h2>Encountering a problem? We are here to help</h2>
        <h3>
            @Html.ActionLink("Contact our Support Team", "Create")
        </h3>
    }
    else if (ViewBag.IfcText == "done")
    {
        @:<h2>We received it, we will be in contact with you in 24 hrs.</h2>
    }
}

在ASP中隐藏来自动作的路由值.净MVC

使用TempData来存储标志。它将只在从前一个请求重定向时可用,这是您想要的。

查看这篇文章以更好地理解

在ASP中何时使用ViewBag、ViewData或TempData ?. NET MVC 3应用程序

这个概念仍然适用于最新版本的MVC

const string ticketSentKey = "ticketSent";
public ActionResult Index()
{
    var ticketSent = false;
    if(TempData.ContainsKey(ticketSentKey) && TempData[ticketSentKey] is bool) 
        ticketSent = (bool)TempData[ticketSentKey];
    if (ticketSent == true)
        ViewBag.IfcText = "done";
    else
        ViewBag.IfcText = "hello";
    return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "TicketNumber,OwnerName,Email,LaptopModelNumber,Subject,Description,ComplainDate")] Ticket ticket)
{
    if (ModelState.IsValid)
    {
        db.Tickets.Add(ticket);
        db.SaveChanges();
        TempData[ticketSentKey] = true;
        return RedirectToAction("Index");
    }
    return View(ticket);
}