我正在试图弄清楚如何简单地将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,两者都没有改变。
提前致谢。
答案 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是我尝试做的事情。我真的很想知道为什么会这样。