Json在mvc中进行模型转换,给出错误:对象引用未设置为对象的实例

时间:2013-10-10 10:23:00

标签: jquery asp.net-mvc-4 nullreferenceexception

我的阿贾克斯:

$.ajax({
                            url: '/Extensions/Sample',
                            type: 'GET',
                            async: false,
                            dataType: 'text',
                            processData: false,
                            //contentType: 'application/json; charset=utf-8',
                            data: "extension=" + JSON.stringify(newextension),
                            success: function (data) {
                                alert("Success");
                            }
                        }).error(function (jqXHR, textStatus, errorThrown) {
                            alert(jqXHR.status);
                            alert(jqXHR.responseText);
                            alert(errorThrown);
                        });

我的控制器:

 public ActionResult Sample(Extension extension)
    {           
        return PartialView(extension);
    }

我的模特:

 public class Extension
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Number { get; set; }
}

我的杰森:

 newextension = [{
                        'Name': 'User1',
                        'Number': '101'
                    },
                    {
                        'Name': 'User2',
                        'Number': '102'
                    },
                    {
                        'Name': 'User3',
                        'Number': '103'
                    }];

错误是未将对象引用设置为对象的实例。 哪里是错误,我该如何解决这个问题。 任何帮助..

2 个答案:

答案 0 :(得分:0)

在您的模型中,删除类Id中的Extension属性或在JSON中添加Id,因为返回的JSON和参数不匹配,因此您的对象是没有初始化。

更新:您发送的JSON是一个列表,因此我猜您需要使用List<Extension> extension作为参数

答案 1 :(得分:0)

如果放置堆栈跟踪将会很有帮助。我在这里看到的一个问题是Sample的参数是Extension类型的对象,而json有这些对象的数组。我的猜测是,在这种情况下,extension参数将为null,这会导致NullReferenceException。

这可能是让签名看起来像这样:

public ActionResult Sample(Extension[] extension)
    {           
        return PartialView(extension);
    }

但是我不确定PartialView在收到数组时会是什么。