C# 在ASP.NET MVC中使用ajax将数据从视图传递到控制器
我对ASP.NET MVC和web开发非常陌生(我主要从事c#和桌面开发),我有一个大问题: 我尝试将数据从视图传递到控制器,但我尝试的所有操作都会在控制器操作中以空或空参数结束 我在网上尝试了很多不同的教程,但都没有成功,我在专业上肯定做错了什么 我创建了一个简单的项目来演示我的问题: 我的看法是:C# 在ASP.NET MVC中使用ajax将数据从视图传递到控制器,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我对ASP.NET MVC和web开发非常陌生(我主要从事c#和桌面开发),我有一个大问题: 我尝试将数据从视图传递到控制器,但我尝试的所有操作都会在控制器操作中以空或空参数结束 我在网上尝试了很多不同的教程,但都没有成功,我在专业上肯定做错了什么 我创建了一个简单的项目来演示我的问题: 我的看法是: @model TestJsonBinding.Models.TestModel <body> @using (Html.BeginForm("TestTransfer",
@model TestJsonBinding.Models.TestModel
<body>
@using (Html.BeginForm("TestTransfer", "Home", FormMethod.Post))
{
<p>Name: <input id="txbName" type="text" value="@Model.Name" /></p>
<p>Alter: <input id="txbAge" type="number" value="@Model.Age" /></p>
<p></p>
<a id="btnSend" onclick="send()"> Send </a>
}
</body>
<script>
function send() {
$.ajax({
type: "POST",
url: "TestTransfer",
contentType: "application/json",
data: GetModelJson(),
success: function (result) {
},
error: function (result) {
alert(result.text);
}
})
}
function GetModelJson() {
var customModel = new Object();
customModel.Name = $("#txbName").attr("value");
customModel.Age = Number($("#txbAge").attr("value"));
alert(JSON.stringify({ JsonDataTransfer: customModel }));
return JSON.stringify({ JsonDataTransfer: customModel });
}
</script>
我的模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace TestJsonBinding.Models
{
public class TestModel
{
public string Name { get; set; }
public int Age { get; set; }
}
}
这就是我的警报显示的JSON:
{“JsonDataTransfer”:{“Name”:“Parker”,“Age”:27}
这就是我在控制器中得到的:
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TestJsonBinding.Models;
namespace TestJsonBinding.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new TestModel() { Name = "Parker", Age = 27});
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
[HttpPost]
public ActionResult TestTransfer(TestModel model)
{
return Json(model);
}
}
}
将模型发布到控制器操作不需要AJAX调用。只需提交表格。而不是:
<a id="btnSend" onclick="send()"> Send </a>
首先,你不需要把你的物体包装成一个或多个物体。我的意思是你的警告应该显示:
{"Name":"Parker","Age":27}
对于它,只需更改此行:
return JSON.stringify({ JsonDataTransfer: customModel });
致:
并将方法符号更改为:
[HttpPost]
public ActionResult TestTransfer([FromBody]TestModel model)
谢谢你的回答。是的,我真的需要ajax。这是一个测试项目,我需要将模型提交给控制器的主要项目在某些方面需要ajax。我用json尝试了您的更改,但仍然不起作用。这个项目肯定有什么大问题,我启动了一个新的asp.net mcv项目,只编辑了预先制作的“Index.cshtml”。像你一样,没有一个来自互联网的借口对我有效。我是否应该使用一个特殊的.NET框架来实现这一点?目前我使用4.5.Hello,谢谢你的回答。我试图测试您的方法,但无法使用System.Web.Http添加所需的名称空间,因此[FromBody]不可用。我将ASP.NET MVC与.NET 4.5结合使用,当我从stringify中的参数中删除“TestModel:”时,我的函数“TestTransfer”的调用就不再起作用了
return JSON.stringify({ JsonDataTransfer: customModel });
return JSON.stringify(customModel);
[HttpPost]
public ActionResult TestTransfer([FromBody]TestModel model)