gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:09:16 26 4
gpt4 key购买 nike

我现在正在几个小时后学习 MVC 3,昨晚我遇到了一个问题,这个问题看起来很容易解决,但我似乎找不到解决方案。

我有一个简单的联系表。最终用户填写表格并提交。当他们提交表单时,我将最终用户重定向到同一 Controller 中的不同操作,该 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);
}

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

我试图将 InquirySubmitted 操作设为私有(private),这样只有 Controller 才能像这样调用它:

private ActionResult InquirySubmitted(ContactInfo contactInfo)

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

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

最佳答案

您需要在 InquirySubmitted ActionResult 中添加逻辑,以防止用户在不应该的情况下查看页面。

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com