[已编辑:此处显示的代码根据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" }
);
}
我的项目组织:
生成不起作用的链接的标记(/ 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>
我现在已经盯着这几个小时了,却看不到它。我知道这很明显,当我看到答案时,我会觉得自己像个白痴。但是当我看到它时,我会成为一个感恩的白痴。提前感谢您的帮助。
答案 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文件信不信由你,在下一次运行中,路由工作完美。我没有做任何其他改变。