C# 在ASP.net MVC5中,如何将日期时间参数从视图传递到控制器?

C# 在ASP.net MVC5中,如何将日期时间参数从视图传递到控制器?,c#,asp.net,asp.net-mvc,parameters,C#,Asp.net,Asp.net Mvc,Parameters,我试图传递3个参数,1个int,2个datetime给一个控制器,但运气不好。我已经创建了自定义路由,但无论我做什么,它都不会连接。 在我看来,我有 @Html.ActionLink("Check Availability", "Check", new { id = item.RoomID, AD = ArrivalDate.Date.ToString("dd-MM-yyyy"), DD = DepartureDate.Date.ToString("dd-MM-yyyy") }, null)

我试图传递3个参数,1个int,2个datetime给一个控制器,但运气不好。我已经创建了自定义路由,但无论我做什么,它都不会连接。 在我看来,我有

@Html.ActionLink("Check Availability", "Check", new { id = item.RoomID, AD = ArrivalDate.Date.ToString("dd-MM-yyyy"), DD = DepartureDate.Date.ToString("dd-MM-yyyy") }, null)
我的控制器里有

   [RoutePrefix("RoomInfoes")]
   [Route("Check/{ID},{AD},{DD}")]
    [HttpPost]
    public ActionResult Check(int? id, string AD, string DD) {
我尝试过许多路线和视图的安排,但从来都无法连接

上面的代码返回一个404,带有

Requested URL: /RoomInfoes/Check/1,06-11-2014,06-11-2014

谢谢

您是否也有用于服务HttpGet请求的检查操作方法?否则,您将得到404错误

您是否也完成了
RouteConfig.cs
中的
routes.MapRoute
?这是使用
@Html.ActionLink
helper方法呈现正确URL所必需的

如果尚未存在,请尝试在
RouteConfig.cs
中添加以下代码

routes.MapRoute(
            name: "RoomInfoes",
            url: "Check/{ID},{AD},{DD}",
            defaults: new
            {
                controller = "RoomInfoes",
                action = "Check",
                ID = UrlParameter.Optional,
                AD = UrlParameter.Optional,
                DD = UrlParameter.Optional
            }
            );

您不需要操作方法上的
Route
RoutePrefix
属性。

使用属性路由之前,请确保已启用该属性:

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

        routes.MapMvcAttributeRoutes(); // add this line in your route config

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
然后像这样装饰你的行为:

[Route("RoomInfoes/Check/{ID},{AD},{DD}")]
public ActionResult Test(int? id, string AD, string DD)
RoutePrefix已被删除,因为它只能用于类声明(代码甚至不会编译)。我删除了HttpPost属性,因为我假设您希望生成一个GET而不是POST

然后,要生成指向此操作的链接,只需编写:

@Html.ActionLink("test", "Test", "Home", new { id = 5, AD="58", DD = "58" }, null)
结果将是:

<a href="/RoomInfoes/Check/5%2c58%2c58">test</a> (the commas in your url will be url encoded)
(url中的逗号将采用url编码)

如果删除日期并只传递整数,是否有效?我所说的移除,是指在控制器上。是的,int被传递。但是没有其他参数。你的链接在悬停时是什么样子的。顺便说一句,我根本无法用[HttpPost]实现这一点,即使使用ajax.actionlink并将其设置为post,也只能作为get请求。作为get请求,它对我来说很好,这表明您的参数是正确的,我也没有routeprefix。如果没有这些,它对你有用吗?非常感谢你的全面回复!我真的很感谢你花了这么多时间