如何将 Json 对象(或字符串数​​据)从 Javascript xmlhttprequest 发送到 MVC 控制器

发布于 2024-11-08 05:46:05 字数 291 浏览 0 评论 0原文

我在 ASP.NET MVC 中创建了一个 Web 应用程序,并尝试通过 Javascript AJAX 调用控制器。在 Jquery 中,我们可以发送一个 json 对象,MVC Model Binder 自动尝试创建一个 .NET 对象并将其作为参数传入控制器。

但是我正在使用无法使用 jquery 的网络工作人员。因此,我通过普通 xmlhttprequest 对象进行 AJAX 调用。有没有办法通过这个方法发送Json对象?

我使用了 xmlhttprequest 的 send 方法,但模型对象在控制器中为 null :(

I created a web application in ASP.NET MVC and trying to call a controller through Javascript AJAX. In Jquery we can send a json object which MVC Model Binder automatically tries to create a .NET object and pass in the controller as an argument.

However I am using a web workers in which jquery cannot be used. So I am making the AJAX call through the vanilla xmlhttprequest object. Is there a a way to send the Json object through this method?

I used the xmlhttprequest's send method but the model object comes as null in the controller :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

别忘他 2024-11-15 05:46:06

您应该能够使用 JSON2 对其进行字符串化,并在发布帖子时将 Content-Type 标头设置为 application/json

http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js< /a>

你会做类似的事情:

var xhr = new XMLHttpRequest();
xhr.open('POST', '/Controller/Action');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
        alert(xhr.responseText);
    }
}
xhr.send(JSON.stringify(myData));

You should just be able to use JSON2 to stringify it and set the Content-Type header to application/json when you do the post.

http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js

You would do something like:

var xhr = new XMLHttpRequest();
xhr.open('POST', '/Controller/Action');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
        alert(xhr.responseText);
    }
}
xhr.send(JSON.stringify(myData));
热风软妹 2024-11-15 05:46:06

这是一个例子。它假设您使用的是 ASP.NET MVC 3.0,它具有内置的 JsonValueProviderFactory。如果这不是你的情况,你可以看看 这篇博文

视图模型:

public class MyViewModel
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult SomeAction(MyViewModel model)
    {
        return Content("success", "text/plain");
    }
}

视图:

<script type="text/javascript">
    var http = new XMLHttpRequest();

    var value = '{ "prop1": "value 1", "prop2": "value 2" }';
    // It would be better to use JSON.stringify to properly generate
    // a JSON string
    /**
    var value = JSON.stringify({
        prop1: 'value 1',
        prop2: 'value 2'
    });
    **/

    http.open('POST', '/Home/SomeAction', true);
    http.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
    http.setRequestHeader('Content-Length', value.length);
    http.onreadystatechange = function () {
        if (http.readyState == 4 && http.status == 200) {
            alert(http.responseText);
        }
    }
    http.send(value); 
</script>

Here's an example. It assumes that you are using ASP.NET MVC 3.0 which has a built-in JsonValueProviderFactory. If this is not your case you could take a look at this blog post.

View model:

public class MyViewModel
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

Controller:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult SomeAction(MyViewModel model)
    {
        return Content("success", "text/plain");
    }
}

View:

<script type="text/javascript">
    var http = new XMLHttpRequest();

    var value = '{ "prop1": "value 1", "prop2": "value 2" }';
    // It would be better to use JSON.stringify to properly generate
    // a JSON string
    /**
    var value = JSON.stringify({
        prop1: 'value 1',
        prop2: 'value 2'
    });
    **/

    http.open('POST', '/Home/SomeAction', true);
    http.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
    http.setRequestHeader('Content-Length', value.length);
    http.onreadystatechange = function () {
        if (http.readyState == 4 && http.status == 200) {
            alert(http.responseText);
        }
    }
    http.send(value); 
</script>
酸甜透明夹心 2024-11-15 05:46:06

使用$.Ajax(),您可以轻松地将数据从javascript获取到MVC中的控制器。

供参考,

var uname = 'Nikhil Prajapati';
$.ajax({

 url: "/Main/getRequestID", // 这是带有操作结果的控制器的路径。
      dataType: "json", // 发送数据的数据类型

      data: { // 将传递给控制器​​的数据
          'my_name': uname, // 分配键值对等数据       
           // 引用中的“my_name”字段与操作结果中的参数相同
      },

      type: "POST", // 请求类型
      contentType: "application/json; charset=utf-8", //可选指定内容类型。

      success: function (data) { // 当请求成功时执行该函数。
              警报(数据);
      },

      错误:函数(数据){
              警报(“错误”); // 当错误发生时执行该函数。
      }

)};

现在在控制器端,

公共 ActionResult getRequestID(String my_name)
{

 MYDBModel myTable = new Models.MYDBModel();
        myTable.FBUserName = my_name;
        db.MYDBModel.Add(myTable);
        db.SaveChanges(); // DbContext.cs 的 db 对象
        //返回RedirectToAction(“索引”); // 之后你可以重定向到一些页面...
        返回 Json(true, JsonRequestBehavior.AllowGet); // 或者您可以在插入数据库后取回该数据。这个 json 也会向我们的视图显示所有详细信息。
    }

更多参考..
只是访问..
将数据从 Java 脚本发送到 MVC 中的控制器

Using $.Ajax(), you can easily got the data from javascript to Controller in MVC.

For Reference,

var uname = 'Nikhil Prajapati';
$.ajax({

      url: "/Main/getRequestID",  // This is path of your Controller with Action Result.
      dataType: "json",           // Data Type for sending the data

      data: {                     // Data that will be passed to Controller
          'my_name': uname,     // assign data like key-value pair       
           // 'my_name'  like fields in quote is same with parameter in action Result
      },

      type: "POST",               // Type of Request
      contentType: "application/json; charset=utf-8", //Optional to specify Content Type.

      success: function (data) { // This function is executed when this request is succeed.
              alert(data);
      },

      error: function (data) {
              alert("Error");   // This function is executed when error occurred.
      }

)};

and, Now At the Controller Side,

public ActionResult getRequestID(String my_name)
{

        MYDBModel myTable = new Models.MYDBModel();
        myTable.FBUserName = my_name;
        db.MYDBModel.Add(myTable);
        db.SaveChanges();              // db object of our DbContext.cs
        //return RedirectToAction(“Index”);   // After that you can redirect to some pages…
        return Json(true, JsonRequestBehavior.AllowGet);    // Or you can get that data back after inserting into database.. This json displays all the details to our view as well.
    }

For more reference..
just visit..
Send Data from Java Script to Controller in MVC

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文