C# 允许将其他参数传递到URL

C# 允许将其他参数传递到URL,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,首先,我为我完全不了解MVC而道歉——我在WPF和Silverlight上工作了四年,刚刚继承了一个MVC应用程序 使用该系统,您当前可以使用以下URL访问车辆: http://localhost:61276/Vehicle/12407 最后的数字是车辆ID,并在控制器中运行此代码 public virtual ActionResult VehicleView(int id) { var vehicle = VehicleService.Get(id); return View

首先,我为我完全不了解MVC而道歉——我在WPF和Silverlight上工作了四年,刚刚继承了一个MVC应用程序

使用该系统,您当前可以使用以下URL访问车辆:

http://localhost:61276/Vehicle/12407
最后的数字是车辆ID,并在控制器中运行此代码

public virtual ActionResult VehicleView(int id)
{
    var vehicle = VehicleService.Get(id);
    return View("VehicleView", new VehicleViewModel { VehicleDetail = vehicle != null ? vehicle.Details : null, Vehicle = vehicle, DetailDisplayType = "features"});
}
最后一个参数是DetailDisplayType

我需要能够更改DetailDisplayType

我天真地认为我可以通过添加另一种方法来做到这一点

public virtual ActionResult VehicleView(int id, string detailDisplayType)
{
    var vehicle = VehicleService.Get(id);
    return View("VehicleView", new VehicleViewModel { VehicleDetail = vehicle != null ? vehicle.Details : null, Vehicle = vehicle, DetailDisplayType = detailDisplayType });
}
但我得到了以下错误:

对控制器类型“SearchController”的当前操作请求“VehicleView”不明确“

我需要保持的能力,以参考车辆没有显示类型,因为他们目前这样做,但有一个可选的显示类型


有人能给我指出正确的方向吗?

您应该创建一个同时包含两个参数的重载,并将第二个参数设置为可选,默认值为
“features”
您应该创建一个同时包含两个参数的重载,并将第二个参数设置为可选,默认值为
功能“

使
detailDisplayType
参数可为空,并将其路由设置为
可选

routes.MapRoute("VehicleView", "vehicles/{id}/{detailDisplayType}",
    new {
        area = "",
        controller = "vehicles",
        action = "vehicleview",
        detailDisplayType = UrlParameter.Optional 
    }
);


使
detailDisplayType
参数为空,并将其路由设置为
Optional

routes.MapRoute("VehicleView", "vehicles/{id}/{detailDisplayType}",
    new {
        area = "",
        controller = "vehicles",
        action = "vehicleview",
        detailDisplayType = UrlParameter.Optional 
    }
);


您可以通过在代码中只实现一个VehicleView操作来解决歧义。您的代码应该如下所示:

public virtual ActionResult VehicleView(int id, string detailDisplayType)
{
    var vehicle = VehicleService.Get(id);
    return View("VehicleView", new VehicleViewModel { VehicleDetail = vehicle != null ? vehicle.Details : null, Vehicle = vehicle, DetailDisplayType = detailDisplayType??"features" });
}

有趣的是动作主体第二行的???“features”。ASP.NET MVC向detailDisplayType参数中提供空值,以防URL中的某个地方没有提供空值(很可能是查询参数).

您可以通过在代码中只实现一个VehicleView操作来解决歧义。您的代码应该如下所示:

public virtual ActionResult VehicleView(int id, string detailDisplayType)
{
    var vehicle = VehicleService.Get(id);
    return View("VehicleView", new VehicleViewModel { VehicleDetail = vehicle != null ? vehicle.Details : null, Vehicle = vehicle, DetailDisplayType = detailDisplayType??"features" });
}
有趣的是动作主体第二行的???“features”。ASP.NET MVC会在detailDisplayType参数中输入一个null,以防URL中的某个地方没有给出该参数(很可能是一个查询参数)