将JSON传递给Controller MVC3 C#.NET

时间:2017-10-02 16:06:19

标签: c# json ajax asp.net-mvc-3 model

我试图将我的数据(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时,一切都很好。但是发生了一些不好的事情,我犯了错误。

Console Browser

Break Point Controller

2 个答案:

答案 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
}