.NET MVC jQuery AJAX - JSON对象作为参数而不是序列化值

时间:2016-12-18 16:53:03

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

我正在试图弄清楚如何简单地将JSON对象传递给控制器​​方法参数。我经常在发布表单时使用JSON.serialize(),并且序列化到C#是自动的。但是,在尝试加载部分内容时,我正在努力使用GET来实现这一点。

我构建了一个小型示例项目作为我需要的基本模拟,这是一个接受int参数和单独模型类的控制器方法,我想将其作为JSON传递。部分html响应被加载到div。

观点:

<div class="row">
    Loading a partial via Ajax, passing a JSON object as a param!
</div>
<div class="row">
    <div id="peoplePartial"></div>
</div>

@section Scripts {
    <script>
        $(function() {
            var id = 1;
            var person = {
                Name: "Homer Simpson",
                Age: 45
            };
            load(id, person);
        });

        function load(id, person) {
            $.ajax({
                cache: false,
                type: "GET",
                dataType: "html",
                url: '/Home/PeoplePartial',
                data: {
                    id: id,
                    person: JSON.stringify(person)
                }
            }).done(function(data) {
                $("#peoplePartial").html(data);
            }).fail(function(data) {
                console.log(data.responseText);
            });
        }
    </script>
}

部分:

@model MVCLearning.Models.PeoplePartialModel

<div>
    <span>Person found! Name is @Model.Person.Name</span>
</div>

部分ViewModel:

public class PeoplePartialModel {
    public int Id { get; set; }
    public PersonModel Person { get; set; }
}

我正在尝试序列化的数据模型/实体:

public class PersonModel {
    public string Name { get; set; }
    public int Age { get; set; }
}

最后,控制器:

public class HomeController : Controller {
    public ActionResult Index() {
        return View();
    }

    public ActionResult PeoplePartial(int id, PersonModel person) {
        if (person != null) {
            var model = new PeoplePartialModel {
                Id = id,
                Person = person
            };
            return PartialView("_People", model);
        } else {
            throw new System.Exception("An Error Has occoured");
        }
    }
}

当然,“id”参数总是有效,但使用JSON.stringify()时,PeopleModel参数始终为null。我原以为它会序列化到模型并包含我在视图中从JS传入的JSON值。我可以通过不使用JSON.stringify()来解决这个问题,但随后会忽略这些值,例如总是以名称传递:null,年龄:0。我似乎无法传递这样的值。

我已经尝试将ajax调用更改为POST但它什么都没改变。我已经尝试将contentType设置为html和json,两者都没有改变。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我明白了。这是属性的神奇组合:

    public class MovieListAdapter extends ArrayAdapter<String > {
    public MovieListAdapter(Context context, int resource, int textViewResourceId, List<String> objects) {
        super(context, resource, textViewResourceId, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
       // I NEED TO PREPARE EACH ROW OF LISTVIEW HERE
       //EVERY ROW CONTAINS 3 TEXTVIEWS WHICH I NEED TO FILL
       //BUT HOW DO I SEND DATA TO FILL THE TEXTVIEW ?
     }

}

我认为我尝试的其中一个变体是使用contentType设置的POST。这引发了一个错误,说两个控制器方法参数都是空的,奇怪的是。我也可以省略dataType并且它可以工作。我无法使用任何的GET变体来工作,即使GET是我尝试做的事情。我真的很想知道为什么会这样。