我的家庭控制器有很多操作,其中一个操作将 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 操作被调用但它假设在用户点击链接时调用。所以哪里出错了。帮我解决一下感谢
答案 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
。