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

Asp.net将两个参数路由到控制器中的方法,asp.net,razor,asp.net-ajax,Asp.net,Razor,Asp.net Ajax,我有以下功能 [Route("/ClientReservations/{id}/{name}")] public ActionResult GetView(int id,string name) { ReservationHouseDetails houseDetails=null; repository.GetHousesForReservation(id).Where(item => item.Name.E

我有以下功能

[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>

    }
@使用(Ajax.BeginForm)(新的AjaxOptions
{
Url=Url.Action(“GetView”、“ClientReservations”,新的{id=Model.Reservation.id,name=Model.SelectedHouseDetailsText}),
HttpMethod=“get”,
InsertionMode=InsertionMode.Replace,
UpdateTargetId=“divForSelectHouse”
}))
{
}

我在debbug模式下进行了检查,to value name是从模型中分配的值。但是,当它传递给呈现的方法时,第二个参数“name”为null。原因可能是什么?

Url.Action(“GetView”、“ClientReservations”、新的{id=Model.Reservation.id,name=Model.SelectedHouseDetailsText})中的问题

您的Url.Action生成
/clientervations/{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 }
);
config.Routes.MapHttpRoute(
    name: "GetViewApi",
    routeTemplate: "{controller}/{id}/{name}",
    defaults: new { controller = "ClientReservations", action = "GetView", id = RouteParameter.Optional, name = RouteParameter.Optional }
);
或者在
WebApiConfig.cs
中:

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

Url.Action(“GetView”、“ClientServations”、新的{id=Model.Reservation.id,name=Model.selectedhousedtailstext})中出现问题。

您的Url.Action生成
/clientervations/{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 }
);
config.Routes.MapHttpRoute(
    name: "GetViewApi",
    routeTemplate: "{controller}/{id}/{name}",
    defaults: new { controller = "ClientReservations", action = "GetView", id = RouteParameter.Optional, name = RouteParameter.Optional }
);
或者在
WebApiConfig.cs
中:

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