【问题标题】:Why @Html.ActionLink("Home", "Index", "home") generates <a href="\">Home</a>为什么@Html.ActionLink("Home", "Index", "home") 生成 <a href="\">Home</a>
【发布时间】:2012-02-23 04:27:35
【问题描述】:

我在使用Html.ActionLink的时候发现@Html.ActionLink("Home", "Index", "home")生成了这个字符串&lt;a href="\"&gt;Home&lt;/a&gt;,那么为什么地址\home\index变成\,我发现这和web.conf中设置的默认路由有关。我查看了 mvc 3 源代码,但找不到答案。谁能帮我?谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 model-view-controller url-routing


    【解决方案1】:

    这是由于默认路由。如果您不指定默认操作和控制器,它将生成 /home/index 作为 url。

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { id = UrlParameter.Optional }
    );
    

    【讨论】:

    • 您可以在 Global.asax 文件中找到并更改默认路由
    • 我觉得route是解析请求url,但是ActionLink是生成url,不是浏览器的请求,为什么会受路由影响?
    • @avatas,所有使用 url 的 HTML 助手在生成这些 url 时都会使用你的路由定义。所以他们肯定会受到路线的影响。
    • @Darin Dimitrov 然后我添加了一个新的ActionLink @Html.ActionLink("Test1","index", "test1"),新的href字符串是"\test1",为什么不是" \test1\index“?路由只设置homeControler的默认值。我猜MVC团队讨厌“索引”。
    • @avatas,你的路线怎么样?我猜你有action = "index" 默认值。
    【解决方案2】:

    路由是双向的:
    - in:它将传入的 url 转换为控制器/动作/参数
    - out:它将控制器/动作/参数转换为 url

    【讨论】:

    • 谢谢。那么为什么@Html.ActionLink("Index", "Index","home") = 'Index' 和@Html.ActionLink("Test1", "Index", "test1") = 'test1'.
    • 从生成的 url 中省略默认值。 index 是默认值(动作),home 是默认值(控制器)。结果: ”/”。对于第二个 actionlink,test1 不是默认值,但 index 是。结果:/test1(test1 是控制器)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2019-12-11
    • 2018-11-17
    • 2019-06-04
    相关资源
    最近更新 更多