隐藏来自ASP.NET MVC中的操作的路由值?

时间:2016-11-03 15:59:39

标签: c# asp.net-mvc

我想使用一个页面根据请求来自的动作显示两个不同的文本,如果此请求直接来自Index它显示了一些欢迎文本,并且它是否来自{{1它形成了一些其他文字:

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); } 操作时,Url包含查询字符串Create,因此,如果用户刷新浏览器或甚至导航到它,只要他获得相同的页面指示表单已成功发送,我希望确保在创建表单后才显示它,而不显示查询字符串。

这是观点:

http://localhost:54401/?ticketSent=True

1 个答案:

答案 0 :(得分:2)

使用TempData存储标志。它只能在上一个请求的重定向中使用,这是你想要的。

查看此文章以便更好地理解

When to use ViewBag, ViewData, or TempData in ASP.NET MVC 3 applications

该概念仍适用于最新版本的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);
}