我现在下班后要学习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/

10-13 02:26