我现在下班后要学习MVC 3,昨晚我遇到了一个问题,它似乎很容易解决,但似乎找不到解决方案。
我有一个简单的联系表。最终用户填写表格并提交。当他们提交表单时,我将最终用户重定向到同一控制器中的其他操作,该控制器呈现“已提交查询”页面/视图,该页面/视图基本上是“谢谢页面”。
像这样设置控制器。
public ActionResult ContactUs()
{
return View();
}
[HttpPost]
public ActionResult ContactUs(ContactInfo contactInfo)
{
if (!ModelState.IsValid)
{
return View();
}
//perform some business logic
return RedirectToAction("InquirySubmitted",contactInfo);
}
public ActionResult InquirySubmitted(ContactInfo contactInfo)
{
return View(contactInfo);
}
问题:
我不希望最终用户通过浏览器直接导航到InquirySubmitted操作。
我只希望控制器中的ContactUs操作能够将用户发送到InquirySubmitted视图。
我试图将InquirySubmitted操作设为私有,以便仅控制器可以这样调用它:
private ActionResult InquirySubmitted(ContactInfo contactInfo)
但这会产生一个我完全理解的错误,因为我正在强制浏览器使用RedirectToAction()请求InquirySubmitted。
所以我的问题很简单:什么是解决此问题的最佳“ MVC 3样式”解决方案?
最佳答案
您将需要在InquirySubmitted ActionResult中放入逻辑,以防止用户不应查看该页面。
您已经在模型中传递了InquirySubmitted方法(ContactInfo)。您能否简单地检查传递给该方法的数据,如果不存在则将用户重定向到错误页面(或您选择的其他页面)?
一种替代解决方案是在会话中设置一个布尔值,以指示用户已填写“ ContactUs”表单。然后,您可以在InquirySubmitted中检查该会话对象。
关于c# - MVC表单提交-重定向到无法直接从浏览器访问的操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9115462/