ASP.NET MVC:链接到具有不同Controller的另一个页面不起作用

时间:2016-06-02 10:22:03

标签: asp.net asp.net-mvc asp.net-mvc-4

我正在开发一个具有不同KPI的仪表板。还有一个与工具的交互,这就是我选择MVC的原因。

现在我有一个带导航栏的布局页面。在导航栏中,我正在与@ Url.Action链接。 到现在为止还挺好。每个页面都在工作,如果链接完成存在另一个Controller,它也可以工作。只有在一个链接中我才有问题 - 我总是得到“资源未找到”的错误。

LockedOrder页面无效。

我的布局视图如下所示:

<ul class="treeview-menu">
                        <li>
                            <a href="@Url.Action("Index", "Home")"><i class="fa fa-circle-o text-yellow"></i>Lab Dashboard<i class="fa fa-angle-left pull-right"></i></a>
                            <ul class="treeview-menu">
                                <li><a href="@Url.Action("Index", "Home")"><i class="fa fa-circle-o"></i>Home</a></li>
                                <li><a href="@Url.Action("Load" , "LockedOrder")"><i class="fa fa-circle-o"></i>Locked Order</a></li>
                            </ul>
                        </li>
                        <li><a href="@Url.Action("Index","DashboardXY" )"><i class="fa fa-circle-o text-blue"></i>DashboardXY</a></li>
                    </ul>

这是我的LockedOrder控制器:

public class LockedOrderController : Controller
{
    List<string> table = new List<string>();

    // GET: LockedOrder
    public ActionResult Load()
    {
        table = LoadTable(table);
        return View();
    }
}

视图Load.cshtml存在于正确的视图文件夹中。

我的RouteConfig文件:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // Locked Order
        routes.MapRoute(
            name: "LockedOrder",
            url: "LockedOrder/{Load}/{id}",
            defaults: new { controller = "LockedOrder", action = "Load" }
        );

        // Dashboard Resources Department Route
        routes.MapRoute(
            name: "DashboardXY",
            url: "dashboard/{ departmentchooser}",
            defaults: new { controller = "DashboardXY", action = "depchooser" }
        );

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

那么为什么所有链接都工作,只有LockedOrder的链接没有?

请帮帮我。 我是ASP.Net MVC的新手,所以如果不清楚,请问我:)

谢谢!

更新:这是我的错误消息,我得到了(对不起,它用德语,但也许可以帮助你帮助我:))

更新2 现在我的代码看起来像这样: RouteConfig LockedOrderController

2 个答案:

答案 0 :(得分:1)

尝试更改此路线配置:

// Locked Order
    routes.MapRoute(
        name: "LockedOrder",
        url: "LockedOrder/{Load}/{id}",
        defaults: new { controller = "LockedOrder", action = "Load" }
    );

到此:

// Locked Order
    routes.MapRoute(
        name: "LockedOrder",
        url: "LockedOrder/{action}/{id}",
        defaults: new { controller = "LockedOrder", action = "Load", id = UrlParameter.Optional }
    );

答案 1 :(得分:1)

以下Url.Action不起作用

@Url.Action("Load" , "LockedOrder")

因为您在id路由中将LockedOrder指定为必需的参数。

    routes.MapRoute(
        name: "LockedOrder",
        url: "LockedOrder/{Load}/{id}", // {id} is required because there is no default.
        defaults: new { controller = "LockedOrder", action = "Load" }
    );

选项1:删除{id}

    routes.MapRoute(
        name: "LockedOrder",
        url: "LockedOrder/{Load}",
        defaults: new { controller = "LockedOrder", action = "Load" }
    );

选项2:将{id}标记为可选

请注意,这会使/LockedOrder/Load/123/LockedOrder/Load作为活动网址转到同一操作方法。

    routes.MapRoute(
        name: "LockedOrder",
        url: "LockedOrder/{Load}/{id}",
        defaults: new { controller = "LockedOrder", action = "Load", id = UrlParameter.Optional }
    );

选项3:在id

中提供Url.Action作为路线值
@Url.Action("Load", "LockedOrder", new { id = 123 })