【问题标题】:Url in ASP.NET MVC layoutASP.NET MVC 布局中的 URL
【发布时间】:2014-08-05 20:50:17
【问题描述】:

我有以下问题。我创建了一个布局和两个使用它的视图。每个视图使用不同的控制器。部分布局是带有站点名称的导航。我想要做的是使站点名称链接始终指向主页/索引操作。当我在主控制器视图上单击站点名称时,它可以工作,但是当我使用不同的控制器转到其他站点时,它会引发错误。

描述:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

我使用默认路由设置。

请求的网址:/index.html

下面是部分模板代码。

@使用 System.Web.Script.Services

<title>Galeria zdjęć</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Art Mission</title>
<!-- Bootstrap -->
<link href="~/Css/bootstrap.min.css" rel="stylesheet" />
<link href="~/Css/style.css" rel="stylesheet" />
@RenderSection("Style", false)

<!-- Navbar
================================================== -->
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="@Url.Action("Index", "Home")">ArtMission</a>
        </div>
        <div id="bs-example-navbar-collapse-1" class="collapse navbar-collapse">
            <ul class="nav navbar-nav navbar-right">
                <li><a href="@Url.Action("Show", "Gallery")">Galeria</a></li>
                <li><a href="#oferta">Oferta</a></li>
                <li><a href="#contact">Kontakt</a></li>
            </ul>
        </div>
        <!--/.nav-collapse -->
    </div>
</div>
<!-- /.navbar -->

 @RenderBody()

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script type="text/javascript" src=@Url.Content("~/Scripts/bootstrap.min.js")></script>
@RenderSection("Script", false)

提前感谢您的帮助。

编辑:我包括了完整的布局。

【问题讨论】:

  • /index.html 将查找名为index.html 的物理文件。带有文件扩展名的 URL 会绕过路由框架。要获得 HomeController.Index 操作,您必须使用 URL /Home/Index/Index 或仅使用 /(基于默认路由)。
  • 我刚刚注意到,当我将鼠标悬停在链接上时,它显示:localhost:port/Gallery/index.html。我不明白为什么它显示的控制器与我在@Url.Action("Index", "Home") 中设置的控制器不同,以及为什么要添加 .html。
  • 您可能在某处缺少或不完整的标记,这会导致 URL 在浏览器尝试“修复”标记时被抬高。或者,也许页面上的某些 JavaScript 行为不端。一个简单的检查方法是在浏览器中禁用 JavaScript 并查看 URL 是否相同。此外,检查实际渲染的源(右键单击 -> 查看源)。查看 URL 是否正确。

标签: asp.net asp.net-mvc asp.net-mvc-4 url-action


【解决方案1】:
@Url.Action("Index", "Home")

无论您在站点的哪个位置,都将始终指向主页控制器中的索引操作。

您的问题可能是您在布局中的某个位置包含了@Url("index"),因此将其替换为@Url("Index", "Home")

@Url("Index") 可以正常工作,直到您从 Home Controller 中的任何操作中检索视图,但是当您转到不同的控制器时,这将中断并且不会指向 /Home/Index,顺便说一下,如果您使用的是默认路由应该只有/Home

【讨论】:

  • 我更新了有问题的代码并包含了完整的布局代码。我不使用@Url.("index")。它现在的工作方式是:我运行主页/索引,页面加载正常,我将鼠标悬停在链接上,它显示 localhost:port。我单击指向画廊的链接,这是从不同控制器返回的视图。页面加载正常,但是当我将鼠标悬停在与上一个站点相同的链接上时,它显示:localhost:port/Gallery/index.html。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2010-09-18
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多