我的控制器中有一个简单的方法 - 带有1个参数的GetMeterProfileData - meterID
public class AlertsDashboardController : Controller
{
public ActionResult GetMeterProfileData(int meterID)
{
List<IMeterProfileData> result = new List<IMeterProfileData>();
{
if (meterID == 1)
{
result.Add(new MeterProfileData() {PeriodDateTime = Convert.ToDateTime("01/01/2000 00:00"), Consumption = 102});
result.Add(new MeterProfileData() {PeriodDateTime = Convert.ToDateTime("31/01/2000 00:30"), Consumption = 12});
}
else
{
result.Add(new MeterProfileData() {PeriodDateTime = Convert.ToDateTime("01/01/2004 00:00"), Consumption = 500});
result.Add(new MeterProfileData() {PeriodDateTime = Convert.ToDateTime("31/01/2004 00:30"), Consumption = 445});
}
}
return Json(result, JsonRequestBehavior.AllowGet);
}
}
我正在使用网址
http://localhost:54728/AlertsDashboard/GetMeterProfileData/2
如您所见,正在指定MeterID
那么为什么我会收到错误
参数字典包含参数的空条目 用于方法的非可空类型'System.Int32'的'meterID' 'System.Web.Mvc.ActionResult GetMeterProfileData(Int32)' 'STC.MVC.Web.Controllers.AlertsDashboardController'。可选的 参数必须是引用类型,可空类型或声明为 一个可选参数。
我的路由设置如下
我是否必须为此方法添加新路线?这样做不太合理,因为我必须设置大量的路线。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}
);
}
我也尝试添加如下所示的新路线但不起作用
routes.MapRoute(
name: "Default2",
url: "{controller}/{action}/{id}",
defaults: new { controller = "AlertsDashboard", action = "Index", id = UrlParameter.Optional }
);
我错过了什么?
保
答案 0 :(得分:3)
参数名称很重要,使用默认路由时必须为id
。您需要将方法签名更新为
public ActionResult GetMeterProfileData(int id)
或者使用正确的参数名称定义不同的路线:
routes.MapRoute(
name: "Default2",
url: "{controller}/{action}/{meterID}",
defaults: new { controller = "AlertsDashboard", action = "Index", meterID = UrlParameter.Optional }
);