Как отправить объект Json (или строковые данные) из Javascript xmlhttprequest в MVC-контроллер
Я создал веб-приложение в ASP.NET MVC и пытался вызвать контроллер через Javascript AJAX. В JQuery мы можем отправить объект json, который MVC Model Binder автоматически пытается создать объект .NET и передать его в качестве аргумента.
Однако я использую веб-работников, в которых нельзя использовать jquery. Поэтому я делаю вызов AJAX через объект villa xmlhttprequest. Есть ли способ отправить объект Json с помощью этого метода?
Я использовал метод отправки xmlhttprequest, но объект модели приходит в контроллер как null: (
Ответы
Ответ 1
Вы должны просто использовать 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));
Ответ 2
Вот пример. Предполагается, что вы используете 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>
Ответ 3
Используя $.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