MVC4区域,HomeControllers和路由

时间:2016-07-07 21:27:53

标签: c# asp.net-mvc-4 routing

http://blog.falafel.com/duplicate-controller-names-aspnet-mvc-areas/

遵循这个建议,现在正在运行。但是,当命中/ area / home / index时,正确的控制器操作会触发,但是它使用的是根网站的Index.cshtml而不是Area文件夹中的Index.cshtml!任何想法如何解决"此?

或者有更好的方法来处理路由以完成同样的事情吗?

目标: http://example.net/ - > HomeController / Index(root)
http://example.net/area1 - > area1.HomeController.Index / area1' Index.cshtml
http://example.net/area1/NotIndex - > area1.HomeController.NotIndex / area1' NotIndex.cshtml
http://example.net/area2 - > area2.HomeController.Index / area2的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);
    }
    ...
}

这很接近,但你仍然需要一个看起来像这样的网址: http://example.net/ProductReuse/Index

如果你试图点击http://example.net/ProductReuse,它会爆炸。

TIA

1 个答案:

答案 0 :(得分:0)

我发现您可以在路由属性中添加空字符串路由名称。

[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);
    }
    ...
}