我已经阅读了Stackoverflow中我可以找到的关于这个主题的所有问题,这些问题还没有那么老,直到现在我还没有找到解决我简单案例的方法。
我刚刚在一个区域中创建了两个控制器,我正在使用默认的自动生成区域路径。
当我尝试访问时:
http://localhost:57969/FieldProduction/CustomerProduction/1
我有一个例外,在Glimpse信息的帮助下,我看到" 1"被解释为动作而不是参数......
I当我尝试使用以下选项访问其中一个区域控制器时
http://localhost:57969/FieldProduction/CustomerProduction/?1
默认操作"索引"使用,但构造函数变量int?我没有被填补。
动作:
public async Task<ActionResult> Index(int? id)
默认区域控制器路线:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"FieldProduction_default",
"FieldProduction/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
我该如何解决这个问题?
答案 0 :(得分:1)
我打开这个问题是为了寻找可能的其他解决方案,但此刻我能够通过在区域注册中编写自定义路线来解决我的问题
//**NEW ROUTE**
context.MapRoute(
"FieldProduction_CustomerProduction",
"FieldProduction/CustomerProduction/{id}",
new { action = "Index", controller = "CustomerProduction", id = UrlParameter.Optional }
);
//**ORIGINAL ROUTE**
context.MapRoute(
"FieldProduction_default",
"FieldProduction/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
答案 1 :(得分:0)
您的路由认为/ 1是操作名称(但您知道这一点) 您有两种选择: 第一个:像这样添加id参数:
http://localhost:57969/FieldProduction/CustomerProduction?id=1
2nd:在此控制器中使用属性路由。
有第三个选项,您可以将正则表达式添加到您的路由,以确定该操作永远不会是int。