zoukankan      html  css  js  c++  java
  • Area使用

    Controller的歧义问题
    试想一下,如果我们现在在根目录的 Controller 文件夹中也添加一个名为 Home 的 Controller,然后我们通过把URL定位到 /Home/Index,路由系统能匹配到根目录下的 Controller 吗?

    在根目录的 Controllers 文件夹中添加好 HomeController 后,为Index添加View,内容随意:

    路由不改动,我们使用 RouteConfig.cs 文件中系统定义的默认路由:

    运行程序,将URL定位到 /Home/Index。结果我们会看到如下错误信息:

    出现这个问题是因为路由系统进行匹配的时候出现了Controller同名的歧义。
    当Area被注册的时候,Area中定义的路由被限制了只寻找 Area 中的Controller,所以我们请求 /Admin/Home/Index 时能正常得到 MvcApplication1.Areas.Admin.Controllers 命名空间的 HomeController。然而我们在RouteConfig.cs文件的RegisterRoutes方法中定义的路由并没有类似的限制。
    为了解决这个问题,我们需要在RouteConfig.cs文件中定义的路由中加上对应的 namespaces 参数。RouteConfig.cs 中修改后的路由如下:

    运行程序,如下结果说明解决了同名歧义问题:

    添加了 namespaces 参数后,路由系统在对这个路由进行匹配时,优先匹配指定命名空间的controller,如果匹配到则即刻停止查找,如果在指定的命名空间下没有匹配到对应的controller,再按照一般的方式进行匹配。

    生成Area URL链接
    关于Area的URL链接生成,可以分为这么三种情况:第一种是在当前Area生成指向当前Area的链接;第二种是生成指向其他Area的链接;第三种是在某个Area中生成指向根目录的链接。下面是这三种情况生成链接的方法,使用的路由定义是系统默认的。
    如果要在Area中生成当前Area的URL链接,直接用下面的方法就行:
    @Html.ActionLink("Click me", "About")
    它根据当前所在的Area和Controller会生成如下Html代码:
    <a href="/Admin/Home/About">Click me</a>

    如果要生成其他Area的URL链接,则需要在Html.ActionLink方法的匿名参数中使用一个名为area的变量来指定要生成链接的Area名称,如下:
    @Html.ActionLink("Click me to go to another area", "Index", new { area = "Support" })
    它会根据被指定的Area去找路由的定义,假定在Support Area中定义了对应的路由,那么它会生成如下链接:
    <a href="/Support/Home/Index">Click me to go to another area</a>

    如果要在当前Area生成指根目录某个controller的链接,那么只要把area变量置成空字符串就行,如下:
    @Html.ActionLink("Click me to go to top-level part", "Index", new { area = "" })
    它会生成如下Html链接:
    <a href="/Home/Index">Click me to go to top-level part</a>

  • 相关阅读:
    Android组件化框架设计与实践
    浅谈Android进阶之路
    Android APP 性能优化的一些思考
    有关 Hybrid 开发模式实践总结
    开发人员必备的技能——单元测试
    有关Android插件化思考
    人生的意义到底是什么?
    Asp.Net Core 3.1学习-读取、监听json配置文件(7)
    Asp.Net Core 3.1学习-依赖注入、服务生命周期(6)
    Asp.Net Core 3.1学习- 应用程序的启动过程(5)
  • 原文地址:https://www.cnblogs.com/xiaoweigogo/p/7802663.html
Copyright © 2011-2022 走看看