2

我的最终目标是<Script>在 _layout 中有一行将从数据库数据生成。对我来说,第 1 步是在页面的“head”部分简单地显示一个注释行。我有一个测试程序可以做到这一点。当我将代码复制到我的站点时,我得到“路由表中的路由与提供的值不匹配”。当我运行网络时。错误指向_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 部分视图:

   <!-- Test comment simply for displaying -->

全球.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                
    );
}

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

谢谢

4

2 回答 2

3

已解决(但我不明白“领域,还有更多要学习的东西”)。

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

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

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

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

于 2013-07-22T22:53:52.340 回答
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" }
        );

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

于 2019-02-26T06:21:47.580 回答