Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC中使用ajax将数据从视图传递到控制器_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 在ASP.NET MVC中使用ajax将数据从视图传递到控制器

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",

我对ASP.NET MVC和web开发非常陌生(我主要从事c#和桌面开发),我有一个大问题:

我尝试将数据从视图传递到控制器,但我尝试的所有操作都会在控制器操作中以空或空参数结束

我在网上尝试了很多不同的教程,但都没有成功,我在专业上肯定做错了什么

我创建了一个简单的项目来演示我的问题:

我的看法是:

@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)