我试图将我的数据(json)从视图传递到ajax到我的控制器,但是这个到了null。提前感谢任何帮助或建议。
这是我的模特。
## Clear the Error variable incase the last server had an error ##
if ($error)
{
$error.clear()
}
## Attempt to do the WMI command ##
try
{
$DHCP = Get-WmiObject win32_service -ComputerName $server -erroraction stop | Where-Object {$_.Name -eq "dhcp"}
}
Catch
{
$errormsg = $_.Exception.Message
}
## If the WMI command errored then do this ##
if ($error)
{
[pscustomobject][ordered]@{
ServerName = $server
DHCP = $errormsg
}
}
## If the WMI command was successful do this ##
Else
{
[pscustomobject][ordered]@{
ServerName = $server
DHCP = $DHCP.State
}
}
这是我的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; }
}
这是我的控制器。
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);
}
});
当我在浏览器控制台中打印json时,一切都很好。但是发生了一些不好的事情,我犯了错误。
答案 0 :(得分:0)
一个问题是您通过AJAX调用发送的数据似乎是一个数组:
jsonListaGeneral = [];
但您的C#模型不是数组或集合:
public ActionResult crearCampManual(TipificacionGeneralCampaña model)
如果要从AJAX向C#Controller发送一组TipificacionGeneralCampaña对象,那么您希望Controller定义如下所示:
public ActionResult crearCampManual(List<TipificacionGeneralCampaña> model)
还要重申@Hackereman在评论中所说的内容,在将数据传递给Controller之前,不需要对数据使用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#中创建集合时,collect中的所有对象都必须属于同一类型,这意味着它们具有相同的属性名称和属性类型。
关于C#Controller当前的设置方式,它将接受一个结构如下的JSON对象:
{
CamposCreados : {
NombreCampaña : "",
Tipificacion : [
{
Existente : 0,
Campo : "",
Regla : 0
},
{
Existente : 1,
Campo : "",
Regla : 1
}
]
}
ListasDeSeleccion : [
{
Columnas : "",
ListasSeleccion : [
{
DatosSeleccion : [
{
"",
"",
""
}
]
},
{
DatosSeleccion : [
{
"",
"",
""
}
]
}
]
}
]
}
答案 1 :(得分:0)
解决方案是更改Json对象的声明。
var jsonListaGeneral = {
"CamposCreados": jsonTipificacion,
"ListasDeSeleccion": jsonListasSeleccion
}