我想使用一个页面根据请求来自的动作显示两个不同的文本,如果此请求直接来自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
答案 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);
}