我正在使用jQuery在ASP.NET MVC中使用Http Post进行Ajax调用。我希望能够传递值字典。
我能想到的最接近的东西是传递多维的字符串数组,但是实际上传递给ActionResult方法的结果是一个包含“键/值”对的字符串连接的一维字符串数组。
例如,下面的“值”数组中的第一项包含以下值:
"id,200"
这是我的ActionResult方法的示例:
public ActionResult AddItems(string[] values)
{
// do something
}
这是我如何从jQuery调用方法的示例:
$.post("/Controller/AddItems",
{
values: [
["id", "200"],
["FirstName", "Chris"],
["DynamicItem1", "Some Value"],
["DynamicItem2", "Some Other Value"]
]
},
function(data) { },
"json");
有谁知道如何将字典对象从jQuery传递到ActionResult方法而不是数组?
我真的很想这样定义我的ActionResult:
public ActionResult AddItems(Dictionary<string, object> values)
{
// do something
}
有什么建议?
更新: 我尝试在值中传递逗号,这基本上使使用字符串解析实际上无法解析键/值对。
通过此:
values: [
["id", "200,300"],
["FirstName", "Chris"]
]
结果:
values[0] = "id,200,300";
values[1] = "FirstName,Chris";
最后我想通了!谢谢大家的建议!我终于找到了最好的解决方案,就是通过Http
Post传递JSON并使用自定义ModelBinder将JSON转换为Dictionary。我在解决方案中所做的一件事是创建了一个从Dictionary继承的JsonDictionary对象,以便可以将自定义ModelBinder附加到JsonDictionary类型,并且如果以后将Dictionary作为ActionResult参数使用时,将来也不会引起任何冲突。与JSON的目的不同。
这是最终的ActionResult方法:
public ActionResult AddItems([Bind(Include="values")] JsonDictionary values)
{
// do something
}
和jQuery“ $ .post”调用:
$.post("/Controller/AddItems",
{
values: Sys.Serialization.JavaScriptSerializer.serialize(
{
id: 200,
"name": "Chris"
}
)
},
function(data) { },
"json");
然后需要注册JsonDictionaryModelBinder,我将其添加到Global.asax.cs中的Application_Start方法中:
protected void Application_Start()
{
ModelBinders.Binders.Add(typeof(JsonDictionary), new JsonDictionaryModelBinder());
}
最后,这是我创建的JsonDictionaryModelBinder对象和JsonDictionary对象:
public class JsonDictionary : Dictionary<string, object>
{
public JsonDictionary() { }
public void Add(JsonDictionary jsonDictionary)
{
if (jsonDictionary != null)
{
foreach (var k in jsonDictionary.Keys)
{
this.Add(k, jsonDictionary[k]);
}
}
}
}
public class JsonDictionaryModelBinder : IModelBinder
{
#region IModelBinder Members
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext.Model == null) { bindingContext.Model = new JsonDictionary(); }
var model = bindingContext.Model as JsonDictionary;
if (bindingContext.ModelType == typeof(JsonDictionary))
{
// Deserialize each form/querystring item specified in the "includeProperties"
// parameter that was passed to the "UpdateModel" method call
// Check/Add Form Collection
this.addRequestValues(
model,
controllerContext.RequestContext.HttpContext.Request.Form,
controllerContext, bindingContext);
// Check/Add QueryString Collection
this.addRequestValues(
model,
controllerContext.RequestContext.HttpContext.Request.QueryString,
controllerContext, bindingContext);
}
return model;
}
#endregion
private void addRequestValues(JsonDictionary model, NameValueCollection nameValueCollection, ControllerContext controllerContext, ModelBindingContext bindingContext)
{
foreach (string key in nameValueCollection.Keys)
{
if (bindingContext.PropertyFilter(key))
{
var jsonText = nameValueCollection[key];
var newModel = deserializeJson(jsonText);
// Add the new JSON key/value pairs to the Model
model.Add(newModel);
}
}
}
private JsonDictionary deserializeJson(string json)
{
// Must Reference "System.Web.Extensions" in order to use the JavaScriptSerializer
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
return serializer.Deserialize<JsonDictionary>(json);
}
}
我有一个Kotlin代码: 现在我想从Java类调用这个方法。我不知道该怎么称呼这个。这是我试过的 但它显示了以下错误。
我有静态方法在我的类 这就是定义 这里用的是 这是我得到的一个错误 E0167类型为“void(TV_DepthCamAgent::)(int count,int copied_file)”的参数与类型为“void()(int,int)”的参数不兼容 错误C3867“TV_DepthCamAgent::progress_callback”:非标准语法;使用' 我做错了什么?
问题内容: 我有一个简单的web方法和ajax调用,并继续收到一个错误,说它无法将字符串转换为IDictionary对象? 这是ajax调用: 这是webMethod: 这是我从FireBug中看到的内容: 响应标头 服务器:Microsoft-IIS / 5.1 日期:2009年4月9日,星期四,格林尼治标准时间 jsonerror:true 缓存控制:私有 内容类型:application /
在下面的代码中,我希望将'races.class'作为参数传递给方法'get allraces()'。我该怎么做?
问题内容: 我正在创建一种通过传递搜索字段从任何表中选择ID的方法。 但是我得到一个有关语法错误的MySqlException。当我查看“异常”消息时,它向我显示带引号的查询表!如何将表格作为不带引号的参数传递? 问题答案: 大多数数据库不允许您通过参数指定表名或列名。参数用于 值 。如果确实确实需要使它动态化,则应验证输入(它应该是一个已知的表名,并且该表中具有已知的列名),然后将其包括在SQL
问题内容: 我正在尝试为我的ASP MVC项目提供一个简单的RESTful API。我将无法控制此API的客户端,它们将通过POST方法传递XML,该方法将包含在服务器端执行某些操作所需的信息,并向XML提供操作结果。我没有发回XML的问题,问题是通过POST接收XML。我已经看到了一些JSON示例,但是由于我将无法控制自己的客户端(从我的角度来看,它甚至可能是telnet),我认为JSON无法正