无法访问位于

时间:2017-10-09 19:04:35

标签: c# asp.net-mvc

[已编辑:此处显示的代码根据NightOwl88和Jasen在回复中提出的建议进行了更新]这令人尴尬,因为我已经多次解决了其他人的问题。也许我已经盯着它看了太久;我无法找到Stack Overflow上最常见问题之一的答案。

我有一个位于MVC区域的视图,我无法访问它。当我点击链接时,我得到了臭名昭着的错误:

==========================================

无法找到资源。   说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

请求的网址:/ EIS /翻译/翻译/

索引

我完成了所有明显的事情:检查拼写;控制者,观点等的位置我现在吃乌鸦并承认我的愚蠢。有人可以找出我出错的地方吗?

我的控制器代码的部分剪辑,TranslationController.cs:

namespace EIS.Web.Areas.Translation.Controllers
{
    public class TranslationController : Controller
    {

        [HttpGet]

        public ActionResult Index()
        {
            return View();
        }

我的观点,Index.cshtml

@{
    ViewBag.Title = "Translation Dashboard";
}

<h2>Translation Dashboard</h2>

我的区域注册:

    public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
                       "Translation_default",
                       "Translation/{controller}/{action}/{id}",
                       new { action = "Index", id = UrlParameter.Optional },
                       new[] { "EIS.Web.Areas.Translation.Controllers" }
                   );
    }

我的项目组织:

enter image description here

生成不起作用的链接的标记(/ EIS /翻译/索引):

  <a href="@Url.Action("Index", "Translation", new { area = "Translation" } )" class="homeLink" onmouseover="$('#mnTranslationLink').attr('src', '@Url.Content("~/")Images/translationwhite.png');" onmouseout="$('#mnTranslationLink').attr('src', '@Url.Content("~/")Images/translationblack.png');" alt="Translation" title="Translation">
                        <img id="mnGovernanceLink" style="margin-top: 8px; border: none !important;" src="@Url.Content("~/")Images/translationblack.png" width="25" height="21" alt="Translation" title="Translation" />
                    </a>

我现在已经盯着这几个小时了,却看不到它。我知道这很明显,当我看到答案时,我会觉得自己像个白痴。但是当我看到它时,我会成为一个感恩的白痴。提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

使用@ Url.Action()创建链接。然后使用routeValues和htmlAttributes参数来提供样式/鼠标悬停事件/等。 这将生成完全限定的URL。

这应该是这样的:

<a href"@Url.Action("Index", "Translation")" class="homeLink" onmouseover="$('#mnTranslationLink').attr('src', '@Url.Content("~/")Images/translationwhite.png');" onmouseout="$('#mnTranslationLink').attr('src', '@Url.Content("~/")Images/translationblack.png');" alt="Translation" title="Translation">
    <img id="mnGovernanceLink" style="margin-top: 8px; border: none !important;" src="@Url.Content("~/")Images/translationblack.png" width="25" height="21" alt="Translation" title="Translation" />
</a>

答案 1 :(得分:0)

您要求的网址是

/EIS/Translation/Index

区域路线定义为:

context.MapRoute(
               "Translation_default",
               "Translation/{controller}/{action}/{id}",
               new { action = "Index", id = UrlParameter.Optional },
               new[] { "EIS.Web.Areas.Translation.Controllers" }
           );

显然,这些不匹配。要匹配此路线,URL必须是

/Translation/Translation/Index

路由基于一个简单的概念 - 第一场比赛获胜。如果@Url.Action("Index", "Translation", new { area = "Translation" })没有生成正确的URL,那么它匹配的路由与在您发布的路径之前注册的路由值相同。这包括与AreaRegistration.RegisterAllAreas()相关的调用RouteConfig.RegisterRoutes(RouteTable.Routes)routes.MapMvcAttributeRoutes()调用AreaRegistration.RegisterAllAreas()的顺序。

您必须分析整个路由配置,以确定您希望匹配的路由不是您匹配的路由。

答案 2 :(得分:0)

好的,我想我找到了答案,感谢Jasen的提示...&#34;。控制器&#34;在我的控制器的命名空间中丢失了。即使我将它添加到命名空间并清理并重建项目之后,它仍然失败并且运行时。

由于Owl88的优秀作品,我检查了所有的路线验证顺序 - 仍然没有运气。

然后,我随心所欲地清除了C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \

下的所有缓存的临时ASP.NET文件

信不信由你,在下一次运行中,路由工作完美。我没有做任何其他改变。