2016-03-08 40 views
2

我想通过窗体发送一个json序列化对象到一个c#MVC动作。通过窗体发送json对象c#mvc

var object = { 
    id: 1, 
    field1: "", 
    field2: "", 
    . 
    . 
    . 
} 

var inputs = "<input type'hidden' name='serializedObject' value='" + JSON.stringify(object) + "'/>"; 
$("<form action='actionUrl' method='POST' >" + inputs + "</form>").appendTo("body").submit().remove(); 

服务器端我有需要字符串化的对象,并分析它们的作用:

[HttpPost] 
public virtual FileResult TestAction(string serializedObject){ 
    //...do stuff.... 
} 

但在行动,我不接收整个JSON字符串(我使用的形式,而不是阿贾克斯因为我必须下载一个文件)。

+1

你会得到哪个json部分? –

+0

它不是很清楚你为什么要做POST。如果你想基于某些值下载文件,那么你可以建立一个url,例如''''''''''''方法是'FileResult TestAction(INT ID,字符串field1等)' –

回答

1

我不知道这是你的问题,但如果你的任何数据值包含单引号,这个单引号后面的下一个值将不会被发送,单引号无效。

建议所有字段和值都必须用双引号包围。

当我发出这样的对象:

var object = { 
      "id": "1", 
      "field1": "Its", 
      "field2": "working", 
      "field3": "Fine!" 
     } 

我在行动中得到这个:

{"id":"1","field1":"Its","field2":"working","field3":"Fine!"} 

但是,当我发这样的:

var object = { 
       "id": "1", 
       "field1": "It's", 
       "field2": "working", 
       "field3": "Fine!" 
      } 

我不完全值:

{"id":"1","field1":"It 

您可以用&#39(“field1”:“It &#39s”)替代单引号,这也起作用。

+0

好吧,问题是我用双引号来定界HTML输入中的属性,并且当我在值属性中插入序列化对象时,这在第一个双引号。 –