Asp.net 将两个参数路由到控制器中的方法

Asp.net route two parameters to method in controller

我有以下功能

[Route("/ClientReservations/{id}/{name}")]
        public ActionResult GetView(int id,string name)
        {
            ReservationHouseDetails houseDetails=null;
            repository.GetHousesForReservation(id).Where(item => item.Name.Equals(name)).ForEach(item => houseDetails = new ReservationHouseDetails()
            {
                House=item,
                Meal = repository.GetHouseMealForReservation(item.Id),
                Participants = repository.GetParticipantsHouseForReservation(item.Id)
            });

            return PartialView("ReservationHouseDetails", houseDetails);
        }

这个方法是这样调用的

@using (Ajax.BeginForm(new AjaxOptions
    {
        Url = Url.Action("GetView", "ClientReservations", new { id = Model.Reservation.Id, name = Model.SelectedHouseDetailsText }),
        HttpMethod = "get",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "divForSelectHouse"
    }))
    {
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" class="SelectHouse"
                       value="Wybierz domek" />
            </div>
        </div>

    }

我在调试模式下进行了检查,并且从模型中为值名称分配了值。但是,当它传递给呈现的方法时,第二个参数 "name" 为空。可能是什么原因?

Url.Action("GetView", "ClientReservations", new { id = Model.Reservation.Id, name = Model.SelectedHouseDetailsText })

中的问题

您的 Url.Action 生成 /ClientReservations/{id}?name={name}

您必须在 RouteConfig.cs 中的 "Default" 之前添加路由:

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

或在WebApiConfig.cs:

config.Routes.MapHttpRoute(
    name: "GetViewApi",
    routeTemplate: "{controller}/{id}/{name}",
    defaults: new { controller = "ClientReservations", action = "GetView", id = RouteParameter.Optional, name = RouteParameter.Optional }
);