当前位置: 首页 > 知识库问答 >
问题:

JS硬代码ajax数据:参数有效。JS变量不存在

燕钟展
2023-03-14

======================

如果我使用JSON,MVC控制器的field1总是有空值(Post([FromBody]TestModel field1])。stringify(MyDdata)。即使是最简单的JSON字符串。

我使用XML到JSON的转换来确保我的JSON数据是正确的。(我还需要了解JSON。)我认为MVC控制器很容易使用以下内容,但输入参数field1为空。至少,TestStrng

控制器没有崩溃,但也不理解JSON。

为什么MVC控件不知道JSON类?

//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" }
      ]
    }
  }
}

======================

我正在尝试用C#学习Web API,并在这个问题上花了一天时间。问题出在JavaScript中,带有"data:..."

硬编码,这是有效的

Ajax数据:{'TestStrng':'one','TestStrng2':'two'}

在控制器下方,如预期的那样,p_TestModel包含值'one'

我尝试了几十种方法,其中很多方法我都不好意思写:

var sdata = "'TestStrng': 'one', 'TestStrng2': 'two'";
sdata = "'TestStrng': 'one'";
var jsonString = JSON.stringify(sdata);
JSON.stringify(sdata); {
  'TestStrng': 'one',
  'TestStrng2': 'two'
}, {
  'TestStrng': 'one',
  'TestStrng2': 'two'
}, {
  field1: "hello"
},
data: {
    sdata
  },
  'TestStrng': 'onetwo'
},
"{ 'TestModel': { 'TestStrng': 'one', 'TestStrng2': 'two' } }",
JSON.stringify(sdata),
  sdata,
  sdata = "'TestStrng': 'one', 'TestStrng2': 'two'";
data: {
  TestModel,
  sdata
},

我做错了什么?为什么JS变量不发送数据,这样控制器就可以像硬编码一样看到它?

public class TestModel {
  public string TestStrng { get; set; }
  public string TestStrng2 { get; set; }
}

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.
   ...
}
$.ajax({
    type: 'post',
    url: serviceUrl,
    cache: false,
    dataType: "json",
    data: sdata, <<<<<<<<<<????
}).done(function (data) {

共有1个答案

唐声
2023-03-14

创建一个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 apiendpoint的不同方法。

 类似资料:
  • 本文向大家介绍JS代码实现table数据分页效果,包括了JS代码实现table数据分页效果的使用技巧和注意事项,需要的朋友参考一下 第一个:实现的很常见很简单的显示页数翻页      效果图: •这是HTML代码,很简单滴(我好像看到了被嫌弃的小眼神) •下面就是JS代码了 第二个:实现前进页和后退页       效果图: •这是全部代码,用得原生JS,依然还是很简单滴(好像对原生js有种莫名的喜

  • el-table 里的输入框实现递增输入,正常输入没有问题,当删掉其中一个值后,再输入符合条件的也不生效了,不知道是什么原因

  • 我需要在CloudKit中获取CkAsset的web url。然而,在swift中,苹果不允许我们获取直接的WebURL,它只下载资产并给我们文件。但是,有了javascript,这是可能的。因此,我编写了一个JS文件来获取CkAsset Weburl。当我在浏览器中运行这个javascript文件时。我试图用下面的代码在swift中运行它,但我不能。我搜索到一个名为“StringByEvalua

  • 本文向大家介绍JS基于Ajax实现的网页Loading效果代码,包括了JS基于Ajax实现的网页Loading效果代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS基于Ajax实现的网页Loading效果代码。分享给大家供大家参考,具体如下: 这是一款很不错的网页Loading效果,常用于Ajax交互式网页设计中,点击按钮即可弹出Loading框,若Loading框未加载完成时关闭网

  • 问题内容: 我试图将AngularJS变量作为onclick()中的参数值来调用javascript函数。谁能指导我该怎么做? 我的代码: 问题答案: 您应该使用ng-click,没有理由使用onclick,因为angular为您提供了此功能 然后,您应该将函数移到AngularJS Controller中,并将其绑定到作用域 如果您绝对需要使用onclick来调用外部函数,则可以在您的范围内将函

  • 本文向大家介绍js变形金刚文字特效代码分享,包括了js变形金刚文字特效代码分享的使用技巧和注意事项,需要的朋友参考一下 为大家分享的js变形金刚文字特效代码如下 -----------------------------------------------效果演示----------------------------------------------- 运行效果图: 以上就是为大家分享的jav