gpt4 book ai didi

json - MVC 3 尝试将 JSON 对象从 View 发送到模型

转载 作者:行者123 更新时间:2023-12-01 03:49:41 26 4
gpt4 key购买 nike

我目前正在尝试将 JSON 对象从我的 View 发布到 MVC 3 应用程序中的 Controller ,并且我期望请求中的数据绑定(bind)到我的 Controller 操作的模型参数。但是,当我检查 HTTP POST 请求时,看起来数据正在作为查询字符串传递,我不确定为什么(这对所有这一切来说都很新)。

这是我的 POST 请求:

    $.ajax({
type: 'POST',
url: "Test/Add",
data: { Name: name, Age: age },
success: function (data) {
console.log("success");
},
error: function (xhr, data, message) {
console.log(data + ": " + message);
},
dataType: "json"
});

这是我的 Controller 中的代码,后面是我尝试绑定(bind)到的模型的代码:

    [HttpPost]
public ActionResult Add(PersonModel person)
{
System.Threading.Thread.Sleep(1000);

return View();
}

// person model:
public class Person {

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

}

这是来自 fiddler 的请求 - 我突出显示了我不确定的部分:

enter image description here

我认为内容类型是“application/json”,并且数据看起来不像查询字符串 - 我认为它看起来像这样:

{
Name: "James",
Age: 13
}

最终的问题是,如果我在 Controller 操作中设置断点,我希望看到一个填充的 Person 对象,但它始终为空。如果我将签名替换为类似 (object name, object Age) 的内容,那么我会得到参数的值(两者都是一个字符串数组 - 所以 name 是一个包含 1 个元素的字符串数组,等于“詹姆斯”)。

我哪里出了问题,有什么想法吗?

哦,仅供引用,我实际上还不到 13 岁!这些是我捣碎的第一个数字。

谢谢!

詹姆斯

最佳答案

@David 是正确的,您需要将 contentType 设置为“application/json”。但你还需要发送 JSON。您正在发送一个对象。要将其转换为 JSON,请使用 JSON.stringify。我尝试将其作为具有此 contentType 设置的对象发送,但收到服务器错误。实际上,我在没有设置 contentType 的情况下让它正常工作。即使请求显示为“Name=James&Age=13”,MVC 也能够将其转换为对象。我修改了您的测试以将结果回显为 JSON 并显示它们。

这是修改后的 Controller

        [HttpPost]
public string Add(PersonModel person)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string result = serializer.Serialize(person);

return result;
}

// person model:
public class PersonModel
{

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

}

修改后的 Javascript 和 HTML 如下所示:

<input id="doAjax" type="button"  value="Send Json..."/>
<br />
Results:<br />
<textarea id="results" cols="30" rows="3"></textarea>
<script type="text/javascript">

$( document ).ready( function () {
$( "#doAjax" ).click( sendJson );
} );

function sendJson() {
var name = "James";
var age = "13";
var person = { Name: name, Age: age };
var personJson = JSON.stringify( person );
$.ajax( {
type: 'POST',
url: "Test/Add",
data: personJson,
contentType: 'application/json',
success: function ( data ) {
var jsonStr = JSON.stringify( data );
$( "#results" ).val( jsonStr );
},
error: function ( xhr, data, message ) {
var jsonStr = JSON.stringify( data );
$( "#results" ).val( jsonStr + ": " + message );
},
dataType: "json"
} );
}

以下是一些测试的结果:

数据=人;内容类型=未设置; request = "姓名=詹姆斯&年龄=13";响应 = "{"姓名":"詹姆斯","年龄":13}"

数据= personJson;内容类型=未设置; request = "{"姓名":"詹姆斯","年龄":"13"}";响应 = "{"姓名":null,"年龄":0}"

数据=人; contentType = '应用程序/json'; request = "姓名=詹姆斯&年龄=13";响应 =“System.ArgumentException:无效的 JSON 原语:名称”

数据= personJson; contentType = '应用程序/json'; request = "{"姓名":"詹姆斯","年龄":"13"}";响应 = "{"姓名":"詹姆斯","年龄":"13"}"

请注意,当未设置 contentType 时,它​​默认为“application/x-www-form-urlencoded”

关于json - MVC 3 尝试将 JSON 对象从 View 发送到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027967/

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