当我从VS2013 IDE

时间:2018-01-18 13:49:01

标签: asp.net-mvc-5

我的家庭控制器有很多操作,其中一个操作将 datatime作为参数

public ActionResult DateCheck(DateTime? orderdate)
{
return View();
}

我有一个指向 DateCheck 操作的操作链接。这是

@Html.ActionLink("Date route test", "DateCheck", new { orderdate = "12-25-2016" })

我已经提到 DateCheck 操作的路线,只需将日期时间作为路线数据传递。这是

    routes.MapRoute(
        name: "",
        url: "{controller}/{action}/{orderdate}",
        defaults: new { controller = "Home", action = "DateCheck", orderdate = UrlParameter.Optional }
    );

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

现在的问题是当我从VS2013 IDE启动我的网站然后 DateCheck 操作被调用但它假设在用户点击链接时调用。所以哪里出错了。帮我解决一下感谢

1 个答案:

答案 0 :(得分:0)

请注意,MVC会尝试按照定义的顺序匹配路由。

此外,{orderDate}定义为UrlParameter.Optional

因此,当您启动应用程序时,localhost/Home/Index的第一个请求与orderDate路由匹配:{controller}"Home"{action}"Index"{orderdate}null。永远不会应用默认路由,因为已找到匹配的路由。订单日期路线的defaults基本上说'#34;我不关心您传递给我的控制器和操作名称,我将始终将您重定向到Home/DateCheck"。

如果DateCheck操作是唯一接受orderDate作为路由值的操作,请更改路由配置以反映这一点:

routes.MapRoute(
    name: "orderDate",
    url: "Home/DateCheck/{orderdate}",
    defaults: new { controller = "Home", action = "DateCheck", orderdate = UrlParameter.Optional }
);

如果您不希望用户直接在浏览器中输入此路由,则无需为了提高URL的可读性而定义额外路由。删除orderDate路线后,您的网址将如下所示:localhost/Home/DateCheck?orderdate=12-25-2016