将Dictionary 传递给MVC Controller
我试图使用AJAX将javascript对象(键值对)传递给MVC Controller操作。
控制器操作具有接收对象的Dictionary参数。
[HttpPost] public ActionResult SearchProject(IDictionary filter ...
当有问题的对象为空 (意味着它在javascript中的值为{})时,我在调试器中看到以下内容。
为什么控制器和操作名称会自动添加到Dictionary参数中?
使用fiddler我能够看到传递给我的控制器的内容,我没有看到传递这两个值。
如果javascript对象不为空,那么一切正常
我很难过..
它附加两个值,因为默认情况下MVC注册了ValueProviderFactory:
public sealed class RouteDataValueProviderFactory : ValueProviderFactory
返回IValueProvider的实现 – RouteDataValueProvider :
public sealed class RouteDataValueProvider : DictionaryValueProvider
基本上它只是绑定字典来路由当前路由的值。
例如,如果您将此类数据添加到RouteConfig
路由:
routes.MapRoute( name: "Default", url: "{controller}/{action}", defaults: new { controller = "Home", action = "Index", SomeSpecificRouteData = 42 } );
那么你的Dictionary将有3个值 – controller
, action
和SomeSPecificRouteData
。
另一个示例是您可以定义此类操作:
public ActionResult Index(string action, string controller, int SomeSpecificRouteData)
和RouteDataValueProvider
将路由中的数据作为参数传递给这些方法。 以这种方式,MVC将路径中的参数绑定到动作的实际参数。
如果要删除此类行为,只需迭代ValueProviderFactories.Factories
并从中删除RouteDataValueProviderFactory
。 但是,您的路线可能会出现参数绑定问题。
- 使用HTTP POST上传AWS S3浏览器会产生无效签名
- 完成ASP.NET页面加载后运行javascript函数
- ASP.NET – Javascript timeOut警告基于web.config中的sessionState timeOut
- 使用JavaScript和/或C#(Unity3D)从PHP脚本加载一些变量
- 需要解决.Net Master Page Name Mangling的问题
- 获取WPF WebBrowser HTML
- 无法将当前JSON数组(例如)反序列化为类型’TenantManagementWebApi.Entities.Tenant
- 使用AngularJS和ASP.NET Web API上载/下载字节数组
- 在C#中调用Javascript函数以获得64位项目