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