使用“路由表中的无路由与提供的值匹配”将@ Html.Action添加到_layout错误。

时间:2013-07-18 01:50:38

标签: asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-areas maproute

我的最终目标是在_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                
    );
}

任何关于应该注意什么的建议都会有所帮助。据我所知,有一个我不知道的参数集需要改变。

由于

2 个答案:

答案 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" }
        );

尽管现在可以使用,但我很乐意得到一个解释;-)