3

我正在尝试完成以下操作并收到 #2 的“找不到资源”错误。假设是因为路由配置不正确。

所需网址:

1) domain.com/客户

2) domain.com/Customer/1 *不工作

3) domain.com/Customer/All

public ActionResult Index(int? id)
{
    var viewModel = new CustomerViewModel();

    if (!id.HasValue)
        id = 1; // ToDo: Current Logged In Customer Id

    viewModel.Load(id.Value);

    return View(viewModel);
}
public ActionResult All()
{
    return View(CustomerModel.All());
}

我的路线配置具有默认路线设置,我尝试添加额外的路线无济于事。

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

我已经排除了建立新路线的尝试,因为它不起作用。

4

2 回答 2

6

您的路线将正常化为domain.com/Customer/Index/1。当您有路由的后续部分时,您不能仅仅因为它的值将是默认值就消除较早的组件。在这种情况下,它正在寻找一个它找不到的名为“1”的动作。

编辑

如果您想要的路由是domain.com/Customer/ID,那么您可以将这样的路由添加到您的路由表中:

routes.MapRoute(
    name: "CustomerAll",
    url: "Customer/All",
    defaults: new { controller = "Customer", action = "All" }
);
routes.MapRoute(
    name: "CustomerByID",
    url: "Customer/{id}",
    defaults: new { controller = "Customer", action = "Index" }
);

这些更具体的路线应该在您的默认路线之前。

于 2012-12-05T00:36:50.983 回答
2

尝试在默认路由之前添加此路由

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

并注意网址以客户而不是客户开头。

并且您想要的 URL 将是 :domain.com/Customers/1而不是domain.com/Customer/1

于 2012-12-05T00:36:53.380 回答