标签:asp-net-mvc-4 c asp-net-mvc routing
在我的MVC 4应用程序中,我使用了Area,这是我的路线:
context.MapRoute(
"Service_AcceptBid",
"Service/{controller}/{action}/{id}/{accept}",
new { area = "Service", controller = "Project", action = "AcceptBid", id = UrlParameter.Optional, accept = UrlParameter.Optional }
);
context.MapRoute(
"Service_BidNegotiation",
"Service/{controller}/{action}/{id}/{bid}",
new { area = "Service", controller = "Project", action = "Negotiations", id = UrlParameter.Optional, bid = UrlParameter.Optional }
);
我将这些链接放在.cshtml页面上:
<div dir="ltr">
@Html.RouteLink("Accept", "Service_AcceptBid", new { controller = "Project", action = "AcceptBid", Id = item.ProjectId, Accept = item.Id })
@Html.RouteLink("Negotiate", "Service_BidNegotiation", new { controller = "Project", action = "Negotiations", Id = item.ProjectId, Bid = item.Id })
</div>
单击第一个链接时,调用了AcceptBid控制器,并将其参数(Id,Accept)设置为url值.但是,当我单击第二个链接时,控制器方法中的ID参数已设置,但第二个参数(Bid)为空.
为什么会这样呢?
我该怎么做才能解决此问题?
谢谢.
解决方法:
解释问题
输出路由(链接生成)很好.问题在于传入路由.当您单击应该由第一条路线处理的第二个链接时,它实际上将由第一条路线处理,因为它匹配其定义.
可能的解决方案(无硬编码操作)
您要做的就是为第一个路由提供其他约束,以防止它处理应由第二个路由处理的请求.
检查以下代码更改,在其中在action参数上添加路由约束以提供可能的值的地方:
context.MapRoute(
"Service_AcceptBid",
"Service/{controller}/{action}/{id}/{accept}",
new { area = "Service", controller = "Project", action = "AcceptBid", id = UrlParameter.Optional, accept = UrlParameter.Optional },
new { action = "AcceptBid|RejectBid|..." }
);
context.MapRoute(
"Service_BidNegotiation",
"Service/{controller}/{action}/{id}/{bid}",
new { area = "Service", controller = "Project", action = "Negotiations", id = UrlParameter.Optional, bid = UrlParameter.Optional }
);
与为每个单独的动作创建静态路由定义相比,这将使您的路由更具动态性.
标签:asp-net-mvc-4,c,asp-net-mvc,routing 来源: https://codeday.me/bug/20191031/1976425.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。