Пропустить объект из JSON в MVC Controller - его всегда null?
Я видел несколько вопросов, связанных с подобной проблемой, я прочитал их, последовал за ними, но все же у меня такая же проблема.
Я в основном создаю объект в javascript и пытаюсь вызвать метод на контроллере, который вернет строку html. Не JSON.
Я играю с dataType и contentType, но до сих пор не радуюсь. Приносим извинения, если фрагменты кода немного беспорядочны.
Построить объект в JS.
function GetCardModel() {
var card = {};
card.CardTitle = $("#CardTitle").val();
card.TopicTitle = $("#TopicTitle").val();
card.TopicBody = $("#TopicBody").data("tEditor").value();
card.CardClose = $("#CardClose").val();
card.CardFromName = $("#CardFromName").val();
return card;
}
Взгляните на объект - все выглядит хорошо и как следует в JSON.
var model = GetCardModel();
alert(JSON.stringify(GetCardModel()));
Сделать звонок...
$.ajax({
type: "POST",
url: "/Postcard/Create/Preview/",
dataType: "json",
//contentType: "application/json",
data: GetCardModel(),
processData: true,
success: function (data) {
alert("im back");
alert(data);
},
error: function (xhr, ajaxOptions, error) {
alert(xhr.status);
alert("Error: " + xhr.responseText);
//alert(error);
}
});
Всегда, когда я вхожу в контроллер, объект ВСЕГДА там, но с нулевыми значениями для всех свойств.
Ответы
Ответ 1
Имя параметра должно быть data
, а не date
:
$.ajax({
type: 'POST',
url: '/Postcard/Create/Preview/',
dataType: 'json',
data: {
CardTitle: $("#CardTitle").val(),
TopicTitle: $("#TopicTitle").val(),
TopicBody: $("#TopicBody").data("tEditor").value(),
CardClose: $("#CardClose").val(),
CardFromName: $("#CardFromName").val()
},
success: function (data) {
alert('im back');
alert(data);
},
error: function (xhr, ajaxOptions, error) {
alert(xhr.status);
alert('Error: ' + xhr.responseText);
}
});
который успешно вызовет следующее действие контроллера, и параметр действия будет правильно привязан:
[HttpPost]
public ActionResult Preview(Card card) { ... }
с приведенной ниже моделью:
public class Card
{
public string CardTitle { get; set; }
public string TopicTitle { get; set; }
public string TopicBody { get; set; }
public string CardClose { get; set; }
public string CardFromName { get; set; }
}