当前位置: 首页 > 面试题库 >

通过字典 到MVC控制器

巫马炫明
2023-03-14
问题内容

我正在尝试使用AJAX将javascript对象(键值对)传递给MVC Controller操作。

控制器操作具有接收对象的Dictionary参数。

[HttpPost]
public ActionResult SearchProject(IDictionary<string, object> filter ...

当有问题的对象为 空时 (意味着它在javascript中的值为{}),我在调试器中看到以下内容。

在此处输入图片说明

为什么控制器和动作名称会自动添加到Dictionary参数中?

使用提琴手,我能够看到正在传递到我的控制器,并且看不到这两个值正在传递..

如果javascript对象不为空,则一切正常

我很沮丧


问题答案:

它附加两个值,因为默认情况下MVC注册了这样的ValueProviderFactory:

public sealed class RouteDataValueProviderFactory : ValueProviderFactory

返回IValueProvider- RouteDataValueProvider的实现:

public sealed class RouteDataValueProvider : DictionaryValueProvider<object>
{
    // RouteData should use the invariant culture since it's part of the URL, and the URL should be
    // interpreted in a uniform fashion regardless of the origin of a particular request.
    public RouteDataValueProvider(ControllerContext controllerContext)
        : base(controllerContext.RouteData.Values, CultureInfo.InvariantCulture)
    {
    }
}

基本上,它只是将Dictionary绑定到当前路由的路由值。

例如,如果您将此类数据添加到的路由中RouteConfig

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}",
    defaults: new { controller = "Home", action = "Index", SomeSpecificRouteData = 42 }
);

那么你的字典将有3个值- controlleractionSomeSPecificRouteData

另一个示例是您可以定义此类操作:

public ActionResult Index(string action, string controller, int SomeSpecificRouteData)

并将RouteDataValueProvider您路线中的数据作为参数传递给这些方法。这样,MVC将路由的参数绑定到操作的实际参数。

如果要删除此类行为,则只需进行迭代ValueProviderFactories.FactoriesRouteDataValueProviderFactory从中删除。但是,您的路由可能会遇到参数绑定问题。



 类似资料:
  • 问题内容: 我正在努力,并努力通过JSON将数组发送到MVC控制器动作。 这是我所拥有的以及我已经尝试过的… 我该怎么做 ? 编辑:建议从顶部发送“按原样” 发送的邮件-不起作用。我在jquery框架的某处收到一个奇怪的异常:( 我认为这意味着它试图将null分配给它不能分配的东西。 编辑:我正在使用MVC2不是3 Edit2:@Monday的答案之后- 问题是由于我如何构建数组 而并非如此-关于

  • 我试图将数据传递给controller进行进一步处理,但在controller中得到null,然而js(ajax)的debug无论如何都会显示这个数字。可能是什么问题? Ajax: 控制器:

  • 问题内容: 我在尝试将复杂的JSON对象传递给MVC 4控制器操作时遇到麻烦。由于JSON内容是可变的,因此我不希望MVC将JSON的各个属性/元素映射到action方法的参数列表中的参数。我只想在控制器操作中将数据作为单个JSON字符串参数获取。 这是我的动作方法的签名: 这是我尝试从浏览器发布一些JSON数据的尝试: 当我在ConvertLogInfoToXML方法的开头击中断点时,jsonO

  • 我试图将JSON发送到Spring MVC控制器。在Spring MVC方面,所有的配置都是正确的。 下面是代码,但似乎没有运行: 你知道我哪里出错了吗?我对JSON是新手。我试图将JSON发送到Spring MVC控制器。 当调用/application/run/save时,我会得到一个JSON响应。但是,@RequestBody不能工作。 我还是没有运气。读过一些很多类似的问题。需求是服务器将

  • 问题内容: 我有一个字典列表: 如何通过匹配name =’Tom’来有效地找到索引位置[0],[1]或[2]? 如果这是一维列表,则可以执行list.index(),但是我不确定如何通过搜索列表中dict的值来进行操作。 问题答案: 如果需要从名称重复获取,则应按名称对它们进行索引(使用字典),这样 get 操作的时间为O(1)。一个想法:

  • 问题内容: 我有这样的课 我在我的参考 我的是根据Firebase查询的类生成的字典数组。然后,我得到了从另一个视图控制器(该函数是集合视图)生成的字符串。我想获取该字符串,然后使用与我之前的字符串相等的字符串过滤或搜索数组。然后删除不等于。不仅对象,而且包含非等键,值对的整个数组。我已经找了几天了,但我坚持过滤从类创建的字典数组。我已经看过并尝试过NSPredicates,for- in循环,但