Как передать объект javascript контроллеру C# MVC 4
в MVC4, как вы передаете объект javascript контроллеру C# в AJAX? Наконец, я попробовал это, но это не сработало.
клиентская сторона Javascript:
var myData = {Propr1: '', Propr2: ''};
$.ajax({
type: 'POST',
data: JSON.stringify(myData),
url: '/Home/SubmitMyData',
contentType: 'application/json',
dataType: 'json',
success: alert('Youhou'),
error: alert('not good')
});
C# серверный метод:
public ActionResult SubmitMyData(MyParamModel myParam)
{
// Do my stuff here with my parameter
return View();
}
public class MyParamModel
{
string Prop1 { get; set; }
string Prop2 { get; set; }
}
мой параметр всегда равен null. Я попытался изменить contentType, но он все еще не работает. Где мои ошибки? Я нашел несколько сообщений, но я не нашел, что я сделал неправильно.
Спасибо большое.
2 ответов
- убедитесь, что имена свойств совпадают между javascript и моделью C#. В вашем вопросе у вас было
Propr1
иPropr2
для объекта javascript, но в модели C# у вас былоProp1
иProp2
(отсутствует "r"). - не
stringify
данные перед отправкой, и не устанавливайтеdataType
tojson
. MVC может отлично разбирать коллекцию параметров post без сериализации json в вашем коде. - пропустить
contentType
, это не необходимый. WebAPI должен автоматически определить это. Вы можете оставить его, но он посторонний. - убедитесь, что свойства модели общественного.
клиентская сторона Javascript:
var myData = {Prop1: '', Prop2: ''}; // #1
$.ajax({
type: 'POST',
data: myData, // #2
url: '/Home/SubmitMyData',
//contentType: 'application/json', #3
//dataType: 'json', #2
success: alert('Youhou'),
error: alert('not good')
});
C# серверный метод:
public ActionResult SubmitMyData(MyParamModel myParam)
{
// Do my stuff here with my parameter
return View();
}
public class MyParamModel // #4
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
значение, которое вы передаете для data
свойство должно быть объектом, а не строкой:
data: myData,
имена свойств должны соответствовать:
var myData = { Prop1: '', Prop2: ''};
вам нужно использовать [FromBody]
атрибут вашего значения параметра:
public ActionResult SubmitMyData([FromBody] MyParamModel myParam)
и свойства модели должны быть public
:
public class MyParamModel
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}