我已经看到了几个相关的问题,但我似乎无法解决我的确切实例。我有一个网址,例如http://127.0.0.1/UTS/Unit/J0000001
。也就是说,我的控制器是UTS
,我的操作是Unit
,并且有一个可选参数c_number
。
我的路线配置如下:
routes.MapRoute(
name: "Unit",
url: "{controller}/{action}/{c_number}",
defaults: new { controller = "UTS", action = "Unit", c_number = "" }
);
然后,我的操作在我的控制器中:
public ActionResult Unit(string c_number)
{
UnitViewModel uvm = new UnitViewModel();
uvm.unit = pacificRepo.Units.FirstOrDefault(g => g.c_number == c_number);
uvm.geoLocation = pacificRepo.GeoLocations.FirstOrDefault(g => g.geo_location.Latitude == uvm.unit.geo_location.Latitude && g.geo_location.Longitude == uvm.unit.geo_location.Longitude);
return View(uvm);
}
每当我转到上面提到的示例网址时,c_number
都会显示为null
。它应该是J0000001
。有没有人看到我失踪的明显明显的东西?
答案 0 :(得分:1)
由于您在Route
中定义了它,因此无需为c_number
添加参数。您可以从RouteData
字典中获取值。c_number
参数仅当您将QueryString
http://someurl.com/UTS/Unit?c_number="J0000001"
作为public ActionResult Unit()
{
var cNumber = RouteData.Values["c_number"].ToString();
}
传递时才有价值
{{1}}