我有以下的模型、视图和控制器。
模型
"视图"
基于上述代码,我想问三个问题。
3.2. 是否有任何方法可以注册自定义Javascript序列化程序,就像我们可以注册自定义视图引擎一样?我的朋友建议我注册自定义值提供程序或自定义模型绑定器,并在我的自定义值提供程序/模型绑定器中使用自定义JS序列化程序。
提前感谢。如果您对我的问题不清楚,请随时让我知道。谢谢!
public class Person {
public string Name;// { get; set; }
public string Occupation { get; set; }
public int Salary { get; set; }
public int[] NumArr { get; set; }
}
"视图"
<input type="button" id="Test" value="Test" />
@section Javascript{
<script type="text/javascript">
$(function () {
$("#Test").click(function () {
var data = { Name: "Michael Tom", Occupation: "Programmer", Salary: 8500, NumArr: [2,6,4,9] };
var url = "Home/GetJson";
$.ajax({
url: url,
dataType: "json",
type: "POST",
data: data,
traditional: true,
success: function (result) {
}
});
});
});
</script>
}
Controller
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public JsonResult GetJson(Person person) {
return Json(......);
}
}
基于上述代码,我想问三个问题。
- 如果我们使用公共字段而不是属性,则序列化程序不会将JSON对象序列化为C#模型,因此在控制器中始终获取“Name”字段的值为空。为什么会这样?
- 如果我将NumArr属性的类型更改为List,则无法正常工作。我们如何使用List而不是int[]?我知道我正在从JS传递数组。我们能否也从JS传递List?
- 我在View的Javascript代码块中使用“traditional:true”,因为序列化无法使用“traditional:false”。我听说jQuery有三个版本的Json序列化程序。ASP.NET MVC的序列化程序仅支持旧版本。这是真的吗?
3.2. 是否有任何方法可以注册自定义Javascript序列化程序,就像我们可以注册自定义视图引擎一样?我的朋友建议我注册自定义值提供程序或自定义模型绑定器,并在我的自定义值提供程序/模型绑定器中使用自定义JS序列化程序。
提前感谢。如果您对我的问题不清楚,请随时让我知道。谢谢!