Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Json字典发布到控制器_C#_Jquery_Ajax_Json_Model View Controller - Fatal编程技术网

C# 将Json字典发布到控制器

C# 将Json字典发布到控制器,c#,jquery,ajax,json,model-view-controller,C#,Jquery,Ajax,Json,Model View Controller,我的jQuery文件中有以下代码 var bases = {}; for (var j = 0; j < selectedVariants.length; j++) { bases[selectedVariants[j].BId] = selectedVariants[j].CId; } 当我在控制器中看到。。。碱基计数为零 请帮我做这个 控制器: [HttpPost] public JsonResult Tflow(JsonFileContentInputs basedeta

我的jQuery文件中有以下代码

var bases = {};
for (var j = 0; j < selectedVariants.length; j++) {
     bases[selectedVariants[j].BId] = selectedVariants[j].CId;
}
当我在控制器中看到。。。碱基计数为零

请帮我做这个

控制器:

[HttpPost]
public JsonResult Tflow(JsonFileContentInputs basedetails)
{   
    //some code   
}
我的模型是:

[ModelBinder(typeof(JsonModelBinder))]
[DataContract]
public class JsonFileContentInputs
{
    [JsonProperty(PropertyName = "basedetails")]
    [DataMember]
    public Dictionary<string, string> basedetails { get; set; }              
}
[ModelBinder(typeof(JsonModelBinder))]
[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“basedetails”)]
[数据成员]
公共字典basedetails{get;set;}
}

您不应该接收类对象,而应该将其作为字符串接收,然后序列化为如下所示的对象

public JsonResult Tflow(string basedetails)
{   
    //some code
    var model = new JavascriptSerializer().Deserialize<JsonFileContentInputs>(basedetails);
    // Your code
}
publicjsonresult-Tflow(字符串basedetails)
{   
//一些代码
var model=new JavascriptSerializer()。反序列化(basedetails);
//你的代码
}

您不应该接收类对象,而应该将其作为字符串接收,然后序列化为如下所示的对象

public JsonResult Tflow(string basedetails)
{   
    //some code
    var model = new JavascriptSerializer().Deserialize<JsonFileContentInputs>(basedetails);
    // Your code
}
publicjsonresult-Tflow(字符串basedetails)
{   
//一些代码
var model=new JavascriptSerializer()。反序列化(basedetails);
//你的代码
}

您不应该接收类对象,而应该将其作为字符串接收,然后序列化为如下所示的对象

public JsonResult Tflow(string basedetails)
{   
    //some code
    var model = new JavascriptSerializer().Deserialize<JsonFileContentInputs>(basedetails);
    // Your code
}
publicjsonresult-Tflow(字符串basedetails)
{   
//一些代码
var model=new JavascriptSerializer()。反序列化(basedetails);
//你的代码
}

您不应该接收类对象,而应该将其作为字符串接收,然后序列化为如下所示的对象

public JsonResult Tflow(string basedetails)
{   
    //some code
    var model = new JavascriptSerializer().Deserialize<JsonFileContentInputs>(basedetails);
    // Your code
}
publicjsonresult-Tflow(字符串basedetails)
{   
//一些代码
var model=new JavascriptSerializer()。反序列化(basedetails);
//你的代码
}

尝试以下方法。如前所述,您需要调用所有数据,而不仅仅是
base
对象:

$.ajax({
    url: '/TUP/Tflow',
    type: 'POST',
    data: "json=" + JSON.stringify({baseDetails: bases}), // stringify everything,
    dataType: 'text',
    async: true,
    cache: false
});
然后在您的控制器中,我们可以自己使用Json.NET反序列化数据,而不是尝试使用模型绑定

控制器:

[HttpPost]
public ActionResult Tflow(string json)
{  
    // deserialize
    var data = JsonConvert.DeserializeObject<JsonFileContentInputs>(json);

    // more code
}
[HttpPost]
公共操作结果Tflow(字符串json)
{  
//反序列化
var data=JsonConvert.DeserializeObject(json);
//更多代码
}
型号:

// You can drop these two as we aren't using the modelbinding
// [ModelBinder(typeof(JsonModelBinder))] 
// [DataContract]
public class JsonFileContentInputs
{
    [JsonProperty(PropertyName = "baseDetails")]
    public Dictionary<string, string> BaseDetails { get; set; }  
}
//您可以删除这两个,因为我们不使用modelbinding
//[ModelBinder(typeof(JsonModelBinder))]
//[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“baseDetails”)]
公共字典BaseDetails{get;set;}
}
不幸的是,在控制器中读取请求的原始流似乎是必要的,因为MVC控制器在默认情况下不能很好地处理原始JSON


编辑:看起来可以将原始JSON传递给MVC控制器,只需将ajax数据类型指定为
text
,并确保参数名称匹配即可。我已相应地更新了答案。

尝试以下方法。如前所述,您需要调用所有数据,而不仅仅是
base
对象:

$.ajax({
    url: '/TUP/Tflow',
    type: 'POST',
    data: "json=" + JSON.stringify({baseDetails: bases}), // stringify everything,
    dataType: 'text',
    async: true,
    cache: false
});
然后在您的控制器中,我们可以自己使用Json.NET反序列化数据,而不是尝试使用模型绑定

控制器:

[HttpPost]
public ActionResult Tflow(string json)
{  
    // deserialize
    var data = JsonConvert.DeserializeObject<JsonFileContentInputs>(json);

    // more code
}
[HttpPost]
公共操作结果Tflow(字符串json)
{  
//反序列化
var data=JsonConvert.DeserializeObject(json);
//更多代码
}
型号:

// You can drop these two as we aren't using the modelbinding
// [ModelBinder(typeof(JsonModelBinder))] 
// [DataContract]
public class JsonFileContentInputs
{
    [JsonProperty(PropertyName = "baseDetails")]
    public Dictionary<string, string> BaseDetails { get; set; }  
}
//您可以删除这两个,因为我们不使用modelbinding
//[ModelBinder(typeof(JsonModelBinder))]
//[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“baseDetails”)]
公共字典BaseDetails{get;set;}
}
不幸的是,在控制器中读取请求的原始流似乎是必要的,因为MVC控制器在默认情况下不能很好地处理原始JSON


编辑:看起来可以将原始JSON传递给MVC控制器,只需将ajax数据类型指定为
text
,并确保参数名称匹配即可。我已相应地更新了答案。

尝试以下方法。如前所述,您需要调用所有数据,而不仅仅是
base
对象:

$.ajax({
    url: '/TUP/Tflow',
    type: 'POST',
    data: "json=" + JSON.stringify({baseDetails: bases}), // stringify everything,
    dataType: 'text',
    async: true,
    cache: false
});
然后在您的控制器中,我们可以自己使用Json.NET反序列化数据,而不是尝试使用模型绑定

控制器:

[HttpPost]
public ActionResult Tflow(string json)
{  
    // deserialize
    var data = JsonConvert.DeserializeObject<JsonFileContentInputs>(json);

    // more code
}
[HttpPost]
公共操作结果Tflow(字符串json)
{  
//反序列化
var data=JsonConvert.DeserializeObject(json);
//更多代码
}
型号:

// You can drop these two as we aren't using the modelbinding
// [ModelBinder(typeof(JsonModelBinder))] 
// [DataContract]
public class JsonFileContentInputs
{
    [JsonProperty(PropertyName = "baseDetails")]
    public Dictionary<string, string> BaseDetails { get; set; }  
}
//您可以删除这两个,因为我们不使用modelbinding
//[ModelBinder(typeof(JsonModelBinder))]
//[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“baseDetails”)]
公共字典BaseDetails{get;set;}
}
不幸的是,在控制器中读取请求的原始流似乎是必要的,因为MVC控制器在默认情况下不能很好地处理原始JSON


编辑:看起来可以将原始JSON传递给MVC控制器,只需将ajax数据类型指定为
text
,并确保参数名称匹配即可。我已相应地更新了答案。

尝试以下方法。如前所述,您需要调用所有数据,而不仅仅是
base
对象:

$.ajax({
    url: '/TUP/Tflow',
    type: 'POST',
    data: "json=" + JSON.stringify({baseDetails: bases}), // stringify everything,
    dataType: 'text',
    async: true,
    cache: false
});
然后在您的控制器中,我们可以自己使用Json.NET反序列化数据,而不是尝试使用模型绑定

控制器:

[HttpPost]
public ActionResult Tflow(string json)
{  
    // deserialize
    var data = JsonConvert.DeserializeObject<JsonFileContentInputs>(json);

    // more code
}
[HttpPost]
公共操作结果Tflow(字符串json)
{  
//反序列化
var data=JsonConvert.DeserializeObject(json);
//更多代码
}
型号:

// You can drop these two as we aren't using the modelbinding
// [ModelBinder(typeof(JsonModelBinder))] 
// [DataContract]
public class JsonFileContentInputs
{
    [JsonProperty(PropertyName = "baseDetails")]
    public Dictionary<string, string> BaseDetails { get; set; }  
}
//您可以删除这两个,因为我们不使用modelbinding
//[ModelBinder(typeof(JsonModelBinder))]
//[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“baseDetails”)]
公共字典BaseDetails{get;set;}
}
不幸的是,在控制器中读取请求的原始流似乎是必要的,因为MVC控制器在默认情况下不能很好地处理原始JSON

编辑:看起来可以将原始JSON传递给MVC控制器,只需将ajax数据类型指定为
text
,并确保参数名称匹配即可。我已经升级了