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