c# - MVC 表单提交 - 重定向到无法从浏览器直接访问的操作

标签 c# asp.net-mvc asp.net-mvc-3

我现在正在下类后学习 MVC 3,昨晚我遇到了一个问题,看起来解决起来很简单,但我似乎找不到解决方案。

我有一个简单的联系表。最终用户填写表格并提交。当他们提交表单时,我将最终用户重定向到同一 Controller 中的不同操作,该操作呈现“已提交的查询”页面/ View ,这基本上是“谢谢页面”。

Controller 的设置如下。

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);
 }

问题: 我不希望最终用户通过浏览器直接导航至 InquirySubscribed 操作。
我只希望 Controller 中的 ContactUs 操作能够将用户发送到 InquirySubscribed View 。

我尝试将 InquirySubscribed 操作设置为私有(private),以便只有 Controller 才能像这样调用它:

private ActionResult InquirySubmitted(ContactInfo contactInfo)

但这会产生一个我完全理解的错误,因为我强制浏览器使用 RedirectToAction() 来请求 InquirySubscribed。

所以我的问题很简单:这个问题的最佳“MVC 3 风格”解决方案是什么。

最佳答案

您需要将逻辑放入 InquirySubscribed ActionResult 中,以防止用户在不应该查看的情况下查看该页面。

您已经将 InquirySubscribed 方法传递给您的模型 (ContactInfo)。您能否简单地检查传递给该方法的数据,如果不存在,则将用户重定向到错误页面(或您选择的其他页面)?

另一种解决方案是在 session 中设置一个 bool 值,指示用户完成了“ContactUs”表单。然后您可以在 InquirySubscribed 中检查该 session 对象。

关于c# - MVC 表单提交 - 重定向到无法从浏览器直接访问的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9115462/

相关文章:

c# - 如何在运行时在 WinForms 中设置多个按钮文本?

c# - 如何防止用户生成的 SQL 查询中的 SQL 注入(inject)

asp.net-mvc - 如何在剑道模板中动态设置列

asp.net-mvc-3 - 此页面未正确重定向 MVC3 + AJAX + 表单例份验证错误

asp.net-mvc - 当使用 Entity Framework 在 MVC 中保存实体副本时,foreach 循环无法正常工作

c# - EF Code First 计算修改和创建的属性

c# - 为什么不让一切都变成 'virtual' 呢?

javascript - Asp.net 部分 View - 单击后设置 html 和 css - 不更改其状态

asp.net-mvc - Orchard 1.6 分页?

javascript - MVC3 Razor - 添加 JavaScript 和 CSS 文件到文件头