gpt4 book ai didi

ajax - 嵌套模型不绑定(bind)

转载 作者:行者123 更新时间:2023-12-05 00:35:49 24 4
gpt4 key购买 nike

我想将 JSON 数据结构传递给 MVC (3) Controller ,将 JSON 对象转换为 C# 对象,并绑定(bind)所有属性。其中一个属性是简单类型。这是基本的模型绑定(bind),对吧?

这是我的模型:

public class Person
{
public string Name { get; set; }
public JobTitle JobTitle { get; set; }
}

public class JobTitle
{
public string Title { get; set; }
public bool IsSenior { get; set; }
}

这是我的 Index.cshtml 页面(发出 AJAX 请求,传入与“Person”类的结构匹配的 JSON 对象):

<div id="myDiv" style="border:1px solid #F00"></div>
<script type="text/javascript">
var person = {
Name: "Bob Smith",
JobTitle: {
Title: "Developer",
IsSenior: true
}
};

$.ajax({
url: "@Url.Action("ShowPerson", "Home")",
data: $.param(person),
success: function (response){
$("#myDiv").html(response);
},
error: function (xhr) {
$("#myDiv").html("<h1>FAIL</h1><p>" + xhr.statusText + "</p>");
}
});
</script>

我的 HomeController 看起来像这样:

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

public ActionResult ShowPerson(Person person)
{
return View(person);
}
}

暂时忽略“ShowPerson.cshtml”文件,因为问题发生在需要它之前。

在 HomeController.ShowPerson 操作中,“person.Name”属性被正确绑定(bind),“person.JobTitle”对象(包含“Title”和“IsSenior”属性)被实例化,但仍然具有默认值“Title” = null”和“IsSenior = false”。

我确信我过去已经毫无问题地完成了嵌套模型绑定(bind)。我错过了什么?任何人都可以阐明为什么模型绑定(bind)似乎只在一层深度起作用吗?

我已经搜索过了,似乎其他人在从表单发送数据时都遇到了绑定(bind)问题,所以我的 $.ajax() 请求中可能遗漏了什么?

最佳答案

好的,您需要做一些更改,

  • 设置数据类型json
  • 设置contentTypeapplication/json; charset=utf-8.
  • 使用JSON.stringify()

下面是修改后的代码。 (测试)

var person = { 
Name: "Bob Smith",
JobTitle: {
Title: "Developer",
IsSenior: true
}
};

var jsonData = JSON.stringify(person);

$.ajax({
url: "@Url.Action("ShowPerson", "Home")",
data: jsonData,
dataType: 'json',
type: 'POST',
contentType: "application/json; charset=utf-8",

success: function (response){
$("#myDiv").html(response);
},
error: function (xhr) {
$("#myDiv").html("<h1>FAIL</h1><p>" + xhr.statusText + "</p>");
}
});

关于ajax - 嵌套模型不绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com