将 JSON 传递给控制器 MVC3 C# .NET
Passing JSON to Controller MVC3 C# .NET
我正在尝试将我的数据 (json) 从视图通过 ajax 传递到我的控制器,但结果为空。提前感谢任何帮助或建议。
这是我的模型。
public class TipificacionModel
{
public int Existente { get; set; }
public string Campo { get; set; }
public int Regla { get; set; }
}
public class ListasSeleccionModel{
public List<string> DatosSeleccion { get; set; }
}
public class ListaTipificaciones
{
public string NombreCampaña { get; set; }
public List<TipificacionModel> Tipificacion { get; set; }
}
public class DatosSeleccionMultiple
{
public List<String> Columnas { get; set; }
public List<ListasSeleccionModel> ListasSeleccion { get; set; }
}
public class TipificacionGeneralCampaña
{
public ListaTipificaciones CamposCreados { get; set; }
public List<DatosSeleccionMultiple> ListasDeSeleccion { get; set; }
}
这是我的 ajax 函数。
jsonListaGeneral = [];
jsonListaGeneral.push(jsonTipificacion);
jsonListaGeneral.push(jsonListasSeleccion);
console.log(jsonListaGeneral);
$.ajax({
url: '@Url.Action("crearCampManual", "DPS")',
type: 'post',
data: JSON.stringify(jsonListaGeneral),
contentType: 'application/json; charset=utf-8;',
dataType: 'json',
success: function (response) {
alert(response)
return;
},
error: function (x) {
alert(x.responseText);
}
});
这是我的控制器。
[HttpPost]
public ActionResult crearCampManual(TipificacionGeneralCampaña model)
{ //Here the model value is null, why?}
当我在浏览器控制台中打印 json 时,一切正常。但是发生了一些不好的事情,我做错了。
Console Browser
Break Point Controller
一个问题是您通过 AJAX 调用发送的数据似乎是一个数组:
jsonListaGeneral = [];
但是您的 C# 模型不是数组或集合:
public ActionResult crearCampManual(TipificacionGeneralCampaña model)
如果您要从 AJAX 向 C# 控制器发送 TipificacionGeneralCampaña 对象数组,那么您希望控制器定义如下所示:
public ActionResult crearCampManual(List<TipificacionGeneralCampaña> model)
还要重申@Hackereman 在他的评论中所说的内容,在将数据传递给控制器之前,您不需要对数据使用 JSON.Stringify 函数:
$.ajax({
url: '@Url.Action("crearCampManual", "DPS")',
type: 'post',
data: jsonListaGeneral,
contentType: 'application/json; charset=utf-8;',
dataType: 'json',
success: function (response) {
alert(response)
return;
},
error: function (x) {
alert(x.responseText);
}
});
我从您的控制台浏览器屏幕截图中注意到的另一个问题:您似乎在将两个不同的对象发送到您的控制器之前添加到同一个 JSON 数组:
jsonListaGeneral.push(jsonTipificacion);
jsonListaGeneral.push(jsonListasSeleccion);
在 C# 中创建集合时,集合中的所有对象都需要属于同一类型,这意味着它们具有相同的 属性 名称和 属性 类型。
根据您的 C# 控制器当前的设置方式,它将接受结构如下的 JSON 对象:
{
CamposCreados : {
NombreCampaña : "",
Tipificacion : [
{
Existente : 0,
Campo : "",
Regla : 0
},
{
Existente : 1,
Campo : "",
Regla : 1
}
]
}
ListasDeSeleccion : [
{
Columnas : "",
ListasSeleccion : [
{
DatosSeleccion : [
{
"",
"",
""
}
]
},
{
DatosSeleccion : [
{
"",
"",
""
}
]
}
]
}
]
}
解决方案是更改 Json 对象的声明。
var jsonListaGeneral = {
"CamposCreados": jsonTipificacion,
"ListasDeSeleccion": jsonListasSeleccion
}
我正在尝试将我的数据 (json) 从视图通过 ajax 传递到我的控制器,但结果为空。提前感谢任何帮助或建议。
这是我的模型。
public class TipificacionModel
{
public int Existente { get; set; }
public string Campo { get; set; }
public int Regla { get; set; }
}
public class ListasSeleccionModel{
public List<string> DatosSeleccion { get; set; }
}
public class ListaTipificaciones
{
public string NombreCampaña { get; set; }
public List<TipificacionModel> Tipificacion { get; set; }
}
public class DatosSeleccionMultiple
{
public List<String> Columnas { get; set; }
public List<ListasSeleccionModel> ListasSeleccion { get; set; }
}
public class TipificacionGeneralCampaña
{
public ListaTipificaciones CamposCreados { get; set; }
public List<DatosSeleccionMultiple> ListasDeSeleccion { get; set; }
}
这是我的 ajax 函数。
jsonListaGeneral = [];
jsonListaGeneral.push(jsonTipificacion);
jsonListaGeneral.push(jsonListasSeleccion);
console.log(jsonListaGeneral);
$.ajax({
url: '@Url.Action("crearCampManual", "DPS")',
type: 'post',
data: JSON.stringify(jsonListaGeneral),
contentType: 'application/json; charset=utf-8;',
dataType: 'json',
success: function (response) {
alert(response)
return;
},
error: function (x) {
alert(x.responseText);
}
});
这是我的控制器。
[HttpPost]
public ActionResult crearCampManual(TipificacionGeneralCampaña model)
{ //Here the model value is null, why?}
当我在浏览器控制台中打印 json 时,一切正常。但是发生了一些不好的事情,我做错了。
Console Browser
Break Point Controller
一个问题是您通过 AJAX 调用发送的数据似乎是一个数组:
jsonListaGeneral = [];
但是您的 C# 模型不是数组或集合:
public ActionResult crearCampManual(TipificacionGeneralCampaña model)
如果您要从 AJAX 向 C# 控制器发送 TipificacionGeneralCampaña 对象数组,那么您希望控制器定义如下所示:
public ActionResult crearCampManual(List<TipificacionGeneralCampaña> model)
还要重申@Hackereman 在他的评论中所说的内容,在将数据传递给控制器之前,您不需要对数据使用 JSON.Stringify 函数:
$.ajax({
url: '@Url.Action("crearCampManual", "DPS")',
type: 'post',
data: jsonListaGeneral,
contentType: 'application/json; charset=utf-8;',
dataType: 'json',
success: function (response) {
alert(response)
return;
},
error: function (x) {
alert(x.responseText);
}
});
我从您的控制台浏览器屏幕截图中注意到的另一个问题:您似乎在将两个不同的对象发送到您的控制器之前添加到同一个 JSON 数组:
jsonListaGeneral.push(jsonTipificacion);
jsonListaGeneral.push(jsonListasSeleccion);
在 C# 中创建集合时,集合中的所有对象都需要属于同一类型,这意味着它们具有相同的 属性 名称和 属性 类型。
根据您的 C# 控制器当前的设置方式,它将接受结构如下的 JSON 对象:
{
CamposCreados : {
NombreCampaña : "",
Tipificacion : [
{
Existente : 0,
Campo : "",
Regla : 0
},
{
Existente : 1,
Campo : "",
Regla : 1
}
]
}
ListasDeSeleccion : [
{
Columnas : "",
ListasSeleccion : [
{
DatosSeleccion : [
{
"",
"",
""
}
]
},
{
DatosSeleccion : [
{
"",
"",
""
}
]
}
]
}
]
}
解决方案是更改 Json 对象的声明。
var jsonListaGeneral = {
"CamposCreados": jsonTipificacion,
"ListasDeSeleccion": jsonListasSeleccion
}