我的最终目标是在_layout中有一个<Script>
行,它将从数据库数据生成。对我来说,第1步只是在页面的“头部”部分显示注释行。我有一个测试程序,这样做很好。当我将代码复制到我的网站时,我得到“路由表中没有路由匹配提供的值”。当我运行网络时。该错误指向_layout中的@ Html.Action(“OVars”,“MyO”)语句。
我曾尝试使用Glimpse和RouteDebugger,但我无法获得有关此路由实际生成的数据以及失败的原因。 RouteDebugger的输出有一个大约30到40个路由的列表,其中只有“默认”路由在Global.asax.cs中。所以我只能假设这些路由是在代码中的其他地方创建的。
@Html.Action("OVars","MyO")
控制器包含:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MySite.Controllers
{
public class MyOController : Controller
{
// ChildActionOnly will not allow direct displaying of this page
[ChildActionOnly]
public ActionResult OVars()
{
return PartialView("_OVars");
}
}
}
_overs ParticleView:
<!-- Test comment simply for displaying -->
的Global.asax.cs
public static void RegisterRoutes(RouteCollection routes)
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
routes.IgnoreRoute("{resource}.ico");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
关于要查看什么的任何建议都是有帮助的。据我所知,有一个我不知道的参数集需要改变。
谢谢
解决了(但我不明白“领域,更需要学习的东西”)。
我将线路@Html.Action("OVars","MyO")
改为@Html.Action("OVars","MyO", new { area = string.Empty })
。
我一直在进行代码更改,直到我收到一条错误消息,当我查找它时发现一些类似于“如果在您所在区域的视图内部也会发生此错误,则使用Html.Action帮助程序。”此帮助程序将始终使用区域作为前置,除非你明确告诉它不要。“提供的示例是将, new { area = string.Empty }
添加到@ Html.Action语句中。
现在@Html.Action工作正常,我可以让控制器访问数据库以获取信息。
接下来的学习议程是“理解领域”。
万一有人和我有同样的斗争。我有一个自定义路线:
routes.MapRoute(
name: "MyPrefixRoute",
url: "myprefix/{code}/{name}",
defaults: new { controller = "Account", action = "MyPrefix", name = UrlParameter.Optional }
);
然后我的默认路由(这是MVC默认路由的轻微变化):
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}/{name}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, name = UrlParameter.Optional }
);
只有在浏览/ myprefix / 123 / the-name而不是/ myprefix / 123?name = the-name和/ myprefix / 123时才会引发异常。
修复它的唯一方法是在没有UrlParameter.Optional的情况下添加第三个自定义路由:
routes.MapRoute(
name: "DefaultAction",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
虽然它现在有效,但我很乐意得到解释;-)