c# - 为什么在 MVC5 中 Optional 参数值会自动填充路由数据?

标签 c# asp.net-mvc asp.net-mvc-5

我在名为“ReportController”的 Controller 中有一个像这样的 MVC 操作:

[HttpGet]    
public virtual ActionResult Index(int id, Dictionary<string,string> filtersVal = null)
{
        ...
}

当我尝试这样调用页面时:http://domain.com/report/index?id=1它正确地执行了操作,但使用 MVC 路由信息填充了“filerVal”参数,如下所示:

[0] = {[controller, report]} [1] = {[action, index]}

如何避免这种情况,使 filterVal 参数保持为空。

请注意:我们最近迁移到 MVC5 .. 它在 MVC3 中运行良好 另外:如果我像这样调用相同的操作: http://domain.com/report/index?id=2&filterVal[0].Key=136&filterVal[0].Value=1然后它在“filterVal”参数中具有正确的值。

有人可以建议我如何避免第一种情况吗?

谢谢。

最佳答案

如果你的路由表有这样的条目:

{controller}/{action}/{id}

,其中 {id} 是可选的,那么您应该使用 url 访问您的页面:

http://yourdomain.com/index/1?xxx=yyy&aaa=bbb

其中 xxx=yyyaaa=bbb 成为 filtersVal 中的值。

关于c# - 为什么在 MVC5 中 Optional 参数值会自动填充路由数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27264349/

相关文章:

c# - 使用字符串列表过滤 Entity Framework

C# 获取控件在窗体上的位置

jquery - 升级到 jQuery 1.9 后 MVC 4 Internet 项目 JSON 错误

c# - switch 语句是否适用于工厂方法? C#

c# - 在 C# 中使用 maskedtextctrl 作为 IP 地址

asp.net-mvc - 使用 LINQ 从 MVC 调用存储过程而不指定类结构(因为它是带有 dtynamic 列的数据透视表)

c# - Web API 2/MVC 5 : Attribute Routing passing parameters as querystring to target different actions on same controller

javascript - Angular .js : How to bind "change" event to service

c# - asp.net mvc 5 GET 上的路由问题

c# - 无法在 Razor 中使用变量设置 DropdownList 名称