C# JS硬代码ajax数据:参数有效。JS变量不存在
====================== 第二部分 如果我使用JSON.stringify(MyDdata),MVC控制器的field1总是有null(Post([FromBody]TestModel field1))null值。即使是最简单的JSON字符串 我使用XML到JSON的转换来确保我的JSON数据是正确的。(我仍然需要了解JSON。)我认为MVC控制器很容易使用以下内容,但输入参数field1为null。至少,TestStrng和TestStrng2应该有值 控制器没有崩溃,但也不理解JSON 为什么MVC控制器不知道JSON类C# JS硬代码ajax数据:参数有效。JS变量不存在,c#,asp.net-mvc,asp.net-web-api2,C#,Asp.net Mvc,Asp.net Web Api2,====================== 第二部分 如果我使用JSON.stringify(MyDdata),MVC控制器的field1总是有null(Post([FromBody]TestModel field1))null值。即使是最简单的JSON字符串 我使用XML到JSON的转换来确保我的JSON数据是正确的。(我仍然需要了解JSON。)我认为MVC控制器很容易使用以下内容,但输入参数field1为null。至少,TestStrng和TestStrng2应该有值 控制器没有崩溃,但也
//JavaScript
var MyDdata =
{
"TestModel": {
"TestStrng": "Scott",
"TestStrng2": "SomethingElse",
"Usr": { "UsrToken": "aaaa" },
"LstSubClass": {
"SubClass": [
{ "FirstName": "Beth" },
{ "FirstName": "Julie" },
{ "FirstName": "John" }
]
}
}
}
sdata = JSON.stringify(MyDdata);
$.ajax({
type: 'post',
url: serviceUrl,
cache: false,
data: sdata,
dataType: "json",
}).done(function (data) {
//C# Class
public class Usr
{
public string UsrToken { get; set; }
}
public class SubClass
{
public string FirstName { get; set; }
}
public class TestModel // Main\Master Class
{
public string TestStrng { get; set; }
public string TestStrng2 { get; set; }
public List<SubClass> LstSubClass = new List<SubClass>();
private Usr _Usr = new Usr();
public Usr oUsr
{
get { return _Usr; }
set { _Usr = value; }
}
}
//MVC Controller
[System.Web.Http.Description.ResponseType(typeof(TestModel))]
public HttpResponseMessage Post([FromBody] TestModel field1)
{
// ...
}
//XML Data
<TestModel>
<TestStrng>Scott</TestStrng>
<TestStrng2>SomethingElse</TestStrng2>
<Usr>
<UsrToken>aaaa</UsrToken>
</Usr>
<LstSubClass>
<SubClass><FirstName>Beth</FirstName></SubClass>
<SubClass><FirstName>Julie</FirstName></SubClass>
<SubClass><FirstName>John</FirstName></SubClass>
</LstSubClass>
</TestModel>
JSON Data
{
"TestModel": {
"TestStrng": "Scott",
"TestStrng2": "SomethingElse",
"Usr": { "UsrToken": "aaaa" },
"LstSubClass": {
"SubClass": [
{ "FirstName": "Beth" },
{ "FirstName": "Julie" },
{ "FirstName": "John" }
]
}
}
}
问题:
我做错了什么?
为什么JS变量不发送数据,以便控制器可以像硬编码一样查看数据?
C级
MVC控制器
[System.Web.Http.Description.ResponseType(typeof(TestModel))]
public HttpResponseMessage Post(TestModel p_TestModel)
{
// p_TestModel has correct values if hardcoded in JS.
// It is ALWAYS null if JS uses a variable (sData) to send it.
...
}
JavaScript
$.ajax({
键入:“post”,
url:serviceUrl,
cache:false,
数据类型:“json”,
数据:sdata,创建一个javascript对象并使用它。这应该是可行的
var sdata= { TestStrng :"Scott",TestStrng2:"SomethingElse" };
$.ajax({
type: 'post',
url: serviceUrl,
data: sdata
}).done(function (data) { console.log(data) });
如果您的视图模型是没有任何复杂导航属性的平面视图模型,则上面的代码可以正常工作。但是,如果您的视图模型具有复杂属性,则需要将js对象转换为JSON字符串,并设置contentType
属性
var model= { Name:"S",Address: { City:"Detroit"} };
$.ajax({
type: 'post',
url: serviceUrl,
data: JSON.stringify(model),
contentType: "application/json"
}).done(function (data) { console.log(data) });
看看如何解释将数据从客户端js代码发送到web api端点的不同方法。谢谢你的回复。我阅读了你提供的链接[和其他100个:)。但我没有进一步了解动态输入参数。JSON.stringify(MyDdata)似乎不适合我。
$.ajax({
type: 'post',
url: serviceUrl,
cache: false,
dataType: "json",
data: sdata, <<<<<<<<<<????
}).done(function (data) {
var sdata= { TestStrng :"Scott",TestStrng2:"SomethingElse" };
$.ajax({
type: 'post',
url: serviceUrl,
data: sdata
}).done(function (data) { console.log(data) });
var model= { Name:"S",Address: { City:"Detroit"} };
$.ajax({
type: 'post',
url: serviceUrl,
data: JSON.stringify(model),
contentType: "application/json"
}).done(function (data) { console.log(data) });