2017-09-14 91 views
0

我想通过jQuery ajax发布一些数据到Asp.Net MVC控制器。我有我一起工作的后续类:传递json到mvc控制器

public class InnerStyle 
{ 
    [JsonProperty("color")] 
    public string HeaderColor { get; set; } 
    [JsonProperty("font-size")] 
    public string HeaderFontSize { get; set; } 
    [JsonProperty("font-family")] 
    public string HeaderFontFamily { get; set; } 
} 

POST方法是这样的:

public JsonResult UpdateRecord(InnerStyle innerStyle) 
{ 
    //Do some validation 

    return Json("OK"); 
} 

我的jQuery的样子:

$('#font-size-ddl').change(function() { 
    var value = $(this).val(); 
    headerObj["font-size"] = value; 
    console.log(JSON.stringify({ innerStyle: headerObj })); 
    $.ajax({ 
      type: "POST", 
      url: "@Url.Action("UpdateRecord", "Document")", 
      data: JSON.stringify({ innerStyle: headerObj}), 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
      console.log(data); 
      } 
    }); 
}); 

在中的console.log以上更改事件产生以下JSON字符串:

{"innerStyle":{"text-align":"","font-size":"20px","color":""}} 

现在我遇到的问题是,如果我在我的UpdateRecord操作中设置了一个断点,并看看innerStyle对象中的内容是否为null。有人能告诉我我要去哪里吗?

+0

似乎[JsonProperty]来自Newtonsoft.Json。 Asp.net控制器不支持它 –

+0

@DanilEroshenko那么我还有什么其他选择来实现我想实现的目标? – Code

+0

你可以看看Model Binder ..简而言之,数据应该在Request中可用。 – user2580925

回答

0

我尝试使用下面的代码,它工作正常。

$.ajax({ 
      type: "POST", 
      url: "@Url.Action("UpdateRecord", "Document")", 
      data: JSON.stringify({"text-align":"","font-size":"20px","color":""}), 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
      console.log(data); 
      } 
    }); 

我只是删除了参数名“在内样式”。我只注意到可能是错字错误的一件事。您正在传递属性“text-align”:“”而不是“font-family”。所以它不会填充控制器的动作UpdateRecord(InnerStyle innerStyle)中的所有属性。你应该通过类似下面的JSON对象的整个对象映射在控制器的动作UpdateRecord(在内样式在内样式)

{ 
    "color": "sample string 1", 
    "font-size": "sample string 2", 
    "font-family": "sample string 3" 
} 
0

@code,你的代码是好的。只是当你通过ajax命中控制器时,你不能使用[Json属性]。你必须使用真实的类属性。

$('#font-size-ddl').change(function() { 
    var value = $(this).val(); 
    var headerObj = {}; 
    headerObj["HeaderColor"] = "Red"; 
    headerObj["HeaderFontSize"] = value; 
    headerObj["HeaderFontFamily"] = "Arial"; 
    console.log(JSON.stringify({ custom: headerObj })); 
    $.ajax({ 
     type: "POST", 
     url: "@Url.Action("UpdateRecord", "Employee")", 
     traditional: true, 
     data: JSON.stringify({ custom: headerObj }), 
     dataType: JSON, 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      console.log(data); 
     } 
    }); 
});