我的最终目标是在_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");
}
}
}
_OVars partialview:
<!-- 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
);
}
任何关于应该注意什么的建议都会有所帮助。据我所知,有一个我不知道的参数集需要改变。
由于
答案 0 :(得分:3)
解决了(但我不明白“领域,更需要学习的东西”)。
我将行@Html.Action("OVars","MyO")
更改为@Html.Action("OVars","MyO", new { area = string.Empty })
。
我一直在进行代码更改,直到我收到一条错误消息,当我查找它时发现一些类似于“如果在您所在区域的视图中也会发生此错误,则使用Html.Action帮助程序。此助手将会总是使用该区域作为前置,除非你明确告诉它不要。“提供的示例是将, new { area = string.Empty }
添加到@ Html.Action语句。
现在@Html.Action工作正常,我可以让控制器访问数据库以获取信息。
接下来的学习议程是“了解领域”。
答案 1 :(得分:0)
万一有人和我有同样的挣扎。 我有一条自定义路线:
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 /名称而不是 / myprefix / 123?name = the-name 或 / myprefix时才引发异常/ 123 。
唯一解决此问题的方法是添加第三个不带UrlParameter的自定义路由。可选:
routes.MapRoute(
name: "DefaultAction",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
尽管现在可以使用,但我很乐意得到一个解释;-)