如何在ASP.net MVC5中将DateTime参数从View传递给Controller?

时间:2014-11-05 23:15:26

标签: c# asp.net asp.net-mvc parameters

我试图将3个参数,一个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

由于

2 个答案:

答案 0 :(得分:1)

是否还有用于提供HttpGet请求的Check Action方法?如果没有,您将收到404错误。

您是否也完成了routes.MapRoute中的RouteConfig.cs?这是使用@Html.ActionLink辅助方法呈现正确的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
            }
            );

您在动作方法上不需要RouteRoutePrefix属性。

答案 1 :(得分:1)

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

    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)