asp.net-mvc - net - fromform frombody




提交表单为JSON(无AJAX) (6)

你可以试试;

// html

<form type="POST" action="/Home/Test">
<input id="foo" value="hede">
</form>

// dto

public class TestInDto{
 public string foo {get;set;}
}

//家庭控制器

[HttpPost]
void Test(TestInDto inDto){
 var foo = inDto.foo;

}

是否有可能提交表单数据作为JSON,而不使用AJAX?

我试过改变enctype:

<form enctype="application/json"></form>

但根据w3schools ,这不是一个有效的价值

我想这种行为的原因是,所请求的URL将返回一个文件,如果我使用AJAX,我显然不能做任何事情。 我想发送标记为Content-Type: application/json JSON数据,以便ASP.NET MVC将使用其JSON绑定。


是的,你可以像使用插件的对象一样序列化表单。 我给你写一个样本。

//头

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="jquery.serialize-object.js"></script>

你可以从这里下载插件

//形成

<form id="frm">
<input type="text" name="Model[Firstname]">
<input type="text" name="Model[Lastname]">
<input type="text" name="ModelDetail[PhoneNumber]">
...
<button type="button" onclick="sendForm()">Send</button>
</form>

// JS

function sendForm(){
model_data = $("#frm").serializeObject();
$.ajax({
url: 'YOUR_SERVICE_URL',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(model_data),
dataType: 'json',
success:function(e){
    // I know, you do not want Ajax, if you callback to page, you can refresh page here
   }
});

祝你好运!


按照W3C标准,你不能像JSON那样传递数据

<form enctype="application/json"></form>

描述

实现此specification用户代理将在表单的enctype属性设置为application/json时从其表单传输JSON数据。 在过渡期间,不支持这种编码的用户代理将fall back使用application/x-www-form-urlencoded 。 这可以在服务器端detected ,并且本specification描述的conversion algorithm可以用于将这些数据转换为JSON

input names使用的路径格式很简单。 首先,当不存在结构信息时,信息将简单地作为JSON对象中的keys捕获

参考DOC


尝试这个简单的存储你的POST数组在变量,然后编码为json obj。 像这样 - >

$ postarray =($ _ POST);
$ jsondata = json_encode($ postarray);

对不起,它的PHP



你可以使用JSON.stringify()来序列化你的客户端对象,然后将其填入隐藏的输入并提交你的表单...然后在控制器端将其从Request.Form中取出并反序列化到你的对象中?

[编辑]刚刚在原来的问题下面的评论部分看到,这本质上是一个重复的帖子,这个计算器作为一个解决方案。





post