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

问题描述 投票:2回答:2

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

关于要查看什么的任何建议都是有帮助的。据我所知,有一个我不知道的参数集需要改变。

谢谢

asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-areas maproute
2个回答
3
投票

解决了(但我不明白“领域,更需要学习的东西”)。

我将线路@Html.Action("OVars","MyO")改为@Html.Action("OVars","MyO", new { area = string.Empty })

我一直在进行代码更改,直到我收到一条错误消息,当我查找它时发现一些类似于“如果在您所在区域的视图内部也会发生此错误,则使用Html.Action帮助程序。”此帮助程序将始终使用区域作为前置,除非你明确告诉它不要。“提供的示例是将, new { area = string.Empty }添加到@ Html.Action语句中。

现在@Html.Action工作正常,我可以让控制器访问数据库以获取信息。

接下来的学习议程是“理解领域”。


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 / the-name而不是/ myprefix / 123?name = the-name和/ myprefix / 123时才会引发异常。

修复它的唯一方法是在没有UrlParameter.Optional的情况下添加第三个自定义路由:

        routes.MapRoute(
            name: "DefaultAction",
            url: "{controller}/{action}",
            defaults: new { controller = "Home", action = "Index" }
        );

虽然它现在有效,但我很乐意得到解释;-)

© www.soinside.com 2019 - 2024. All rights reserved.