【发布时间】:2013-12-29 05:31:57
【问题描述】:
我可以使用 Get 和 RedirectToAction 做到这一点,但想知道为什么我不能使用 Post 做到这一点? 我在 Subscriber 控制器中,想从 CreateTest 控制器返回一个视图。 当它返回时,它假定我仍在订阅者中并且不在控制器视图中查看。
public class SubscriberController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateTestPortal()
{
CreateTestController ctc = new CreateTestController();
return ctc.CreateTestPortal();
}
}
public class CreateTestController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateTestPortal()
{
//... validation logic
var vm = new CBT.Models.CreateTest.CreateTestPortal();
//... build form logic
return View(vm);
}
}
如果我从订阅服务器中的 CreateTestPortal 进行此调用,
return RedirectToAction("CreateTestPortal", "CreateTest");
它正确返回表单,但我必须使用 GET 方法并失去 ValidateAntiForgeryToken 的安全性。这是默认行为还是我错过了一步。
我正在使用 MVC4
【问题讨论】:
-
您必须使用控制器来执行此操作吗?我认为答案是否定的,控制器应该呈现视图、重定向等等,但是当通过控制器创建对象的新实例时,我相信类会更合适。如果不是这种情况,您在提交给控制器时会得到什么?
-
我收到此消息 --" '/' 应用程序中的服务器错误。未找到视图 CreateTestPortal 或其主服务器或没有视图引擎支持搜索的位置。搜索了以下位置:然后列出它在 Views/Subscriber 和 Views/Shared 中的搜索路径我想要它做的是搜索 CreateTest,因为视图在那里,但它从不查看该文件夹。它只查看订阅者和共享
-
你真的不应该像这样手动实例化控制器。您真正想要实现的目标是什么?
-
每个人都想明白的问题是:为什么需要从控制器 A POST 到控制器 B?根据您要完成的工作,有很好的解决方案:部分视图、服务类、帮助程序、将视图呈现为字符串...
标签: c# asp.net-mvc asp.net-mvc-4