Как отправить объект Json (или строковые данные) из Javascript xmlhttprequest в MVC Controller - PullRequest
17 голосов
/ 19 мая 2011

Я создал веб-приложение в ASP.NET MVC и пытаюсь вызвать контроллер через Javascript AJAX.В Jquery мы можем отправить объект json, который MVC Model Binder автоматически пытается создать .NET-объект и передать в качестве аргумента контроллер.

Однако я использую веб-работников, в которых jquery не может быть использован.Поэтому я делаю AJAX-вызов через объект vanilla xmlhttprequest.Есть ли способ отправить объект Json через этот метод?

Я использовал метод send xmlhttprequest, но объект модели в контроллере имеет нулевое значение: (*

Ответы [ 3 ]

36 голосов
/ 19 мая 2011

Вы должны просто иметь возможность использовать JSON2 для его строкового форматирования и установить заголовок Content-Type на application/json при создании сообщения.

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

Вы бы сделали что-то вроде:

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));
4 голосов
/ 19 мая 2011

Вот пример.Предполагается, что вы используете 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>
0 голосов
/ 26 августа 2013

Используя $ .Ajax (), вы можете легко получить данные из javascript в Controller в MVC.

Для справки,

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.
      }

)};

и, теперь на стороне контроллера,

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.
    }

Для получения дополнительной информации.просто посетите .. Отправьте данные из Java Script на контроллер в MVC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...