我从一位在我加入之前离开公司的程序员那里继承了一个破碎的MVC应用程序。之前的程序员在他的最后一次行动中,将应用程序重新组织为区域(如附带的解决方案资源管理器快照中所示)。我把头发拉过来,我确信这是一件简单的事情,但是因为我是MVC的新手,现在是一件很重要的事情:
标记@ Html.ActionLink()生成的许多链接都正常工作,但有些链接失败,而#34; 404资源无法找到[...]"错误。
以下是失败的链接示例:
@Html.ActionLink("Upload Documents", "BlankPageTest", new { controller = "DocumentUpload", area = "Documents" }, new { @class = "btn btn-info" })
...这是一个有用的链接:
@Html.ActionLink("Edit Questions", "ChangeQuestions", new { controller = "Account", area = "UserAccount" }, new { @class = "btn btn-info" })
这两个链接都在View" MyAccount.cshtml"的标记中,它位于" UserAccount"区域内。我可以在失败的链接和工作链接之间看到的唯一功能差异是工作链接的资源(ChangeQuestions.cshtml)作为视图存在于同一区域(MyAccount.cshtml)。但是,由于控制器和区域都是Html.ActionLink()的参数,我不知道MVC会如何混淆。
找不到" 404资源中提供的完整网址"消息是:
/CROMERR.Website/Documents/DocumentUpload/BlankPageTest
我在控制器中有一个名为&#34的目标网址的方法; DocumentUpload" ...找不到任何更明显的事情,所以我想问一个知识渊博的人。任何和所有帮助表示赞赏。
DocumentAreaRegistration
包含代码:
public override string AreaName
{
get
{
return "Documents";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Documents_default",
"Documents/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional });
}
答案 0 :(得分:1)
根据您提出的上一个问题,您的问题是将您的观点置于导致404错误的错误位置。
从DocumentUpload
控制器,您尝试返回视图BlankTestPage.cshtml
。但是,在查看屏幕截图时,BlankTestPage.cshtml
视图实际上位于Views/Documents
文件夹中。默认情况下,MVC只会查找文件夹Views/ControllerName
(其中控制器名称是尝试返回视图的控制器的名称)和Views/Shared
。
如果您需要从多个控制器引用BlankTestPage.cshtml
,请将其放在共享文件夹中。否则,您需要将该视图从Documents View文件夹移动到DocumentUpload视图文件夹(屏幕截图中的空文件夹)。