在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>
}
}
使用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);
}