我有一个名为“Subscribers”的区域和一个名为“SubscriptionsController”的控制器,该区域有两个公共操作方法:Index() 和 Unsubscribe(),其中 Unsubscribe() 方法传递了一个订阅者 id,即 Unsubscribe(int id)
在某些情况下(例如 id 无效),Unsubscribe() 方法对同一控制器上的其他操作执行 RedirectToAction("Index")。
public ActionResult Index()
{
return View();
}
如果我通过“/Subscribers/Subscriptions/Unsubscribe/999”访问该页面,则 RedirectToActionMethod() 会正确地将我重定向到 Index() 操作。
我希望能够“捷径”正式的 url ('/Subscribers/Subscriptions/Unsubscribe/999') 所以我添加了一条到 Global.ascx 文件的路由:
routes.MapRoute(
"Unsubscribe",
"Unsubscribe/{id}",
new {area = "Subscribers", controller = "Subscriptions", action = "Unsubscribe"}
);
此路由似乎可以正常工作,因为它按预期运行 Unsubscribe() 方法。我遇到的问题是 Unsubscribe() 中对 RedirectToAction("Index") 的调用现在失败,因为它们仍然调用正确的操作(Index()),视图引擎现在忽略该区域并尝试加载相对于网站的根目录 '~/Views/Subscriptions/Index.aspx' 而不是 '~/Areas/Subscribers/Views/Subscriptions/Index.aspx'
我可以通过修改 Unsubscribe() 方法中的 RedirectToAction() 方法来解决这个问题:
return RedirectToAction("Index", "Subscriptions", new { Area = "Subscribers" });
但这似乎是一个麻烦且不是很灵活的问题解决方案。
任何建议或解释将不胜感激。
谢谢。