MVC4 区域、家庭控制器和路由
本文关键字:路由 控制器 家庭 区域 MVC4 | 更新日期: 2023-09-27 17:55:42
http://blog.falafel.com/duplicate-controller-names-aspnet-mvc-areas/
遵循此建议,现在正在跑步。 但是,当点击/area/home/index 时,会触发正确的控制器操作,但它使用的是根站点中的 Index.cshtml,而不是 Area 文件夹中的 Index.cshtml! 任何想法如何"解决"这个问题?
或者有没有更好的方法来处理路由来完成同样的事情?
目标:http://example.net/-> 主控制器/索引(根)
http://example.net/area1 ->区域1。HomeController.Index/area1's Index.cshtml
http://example.net/area1/NotIndex ->区域1。HomeController.NotIndex/area1's NotIndex.cshtml
http://example.net/area2 ->区域2。HomeController.Index/area2's Index.cshtml
等。。。
我尝试了不同区域的属性路由。
[RouteArea("ProductReuse")]
[Route("ProductReuse")]
public partial class ProductReuseController : BaseProductReuseController
{
[HttpGet]
[Route("Index")]
public ActionResult Index()
{
if (SessionUserLogin == null) return LoginActionResult(SessionAppName);
var serviceResponse = _productReuseService.IndexQuery(SessionUserId);
var response = _mapper.Map<IndexViewModel>(serviceResponse);
return View(response);
}
...
}
这很接近,但您仍然必须有一个如下所示的 URL:http://example.net/ProductReuse/Index
如果你试图击中 http://example.net/ProductReuse 它会爆炸。
蒂亚
我发现您可以将空字符串路由名称添加到路由属性中。
[RouteArea("ProductReuse")]
[Route("ProductReuse")]
public partial class ProductReuseController : BaseProductReuseController
{
[HttpGet]
[Route("Index")]
[Route("")] // Use an empty name to set the default page...
public ActionResult Index()
{
if (SessionUserLogin == null) return LoginActionResult(SessionAppName);
var serviceResponse = _productReuseService.IndexQuery(SessionUserId);
var response = _mapper.Map<IndexViewModel>(serviceResponse);
return View(response);
}
...
}