В приложении ASP.NET MVC3 я пытаюсь использовать jQuery для создания асинхронной публикации в действии.
Следующий объект JSON передается как данные ...
{
categoryId: "21"
content: "asdf"
reference: "asdf"
tags: [
{id: 1, name: "asdf", status: 1},
{id: 2, name: "asdf", status: 1},
{id: 3, name: "asdf", status: 1}
]
}
Подпись метода, которую я должен получить:
[HttpPost]
public ActionResult Create(String reference, Int32? categoryId, String content, IEnumerable<TagDTO> tags)
с TagDTO определяется как:
public class TagDTO
{
public String name { get; set; }
public Int32 id { get; set; }
public Int32 status { get; set; }
}
Я должен упомянуть, что до того, как я ввел массив объектов в объект JSON и в сигнатуру метода действия, это работало отлично. И Почта все еще успешно достигает действия, только данные в IEnumerable не проходят правильно. Это даст мне правильное количество объектов в IEnumerable, но все они инициализируются значениями по умолчанию. (id = 0, name = null, status = 0)
Я не уверен, что я делаю здесь не так. Я надеюсь это имеет смысл. Я надеюсь, что кто-то может показать мне правильный способ передачи данных в действие MVC таким образом.
Спасибо
Вот функция javascript, которую я использую для выполнения своего вызова ajax ...
function saveResource() {
var tagAssignments = [];
for (var x = 0; x < $('.tag-assignment').length; x++) {
var tag = $($('.tag-assignment')[x]);
tagAssignments.push({
name: tag.find('.tag-name').html().toString(),
id: parseInt(tag.find('.tag-id').html()),
status: parseInt(tag.find('.tag-status').html())
});
}
$.ajax({
url: '/Resources/Create',
dataType: 'json',
type: 'POST',
success: function (data) {
if (data.status == 'Success') {
forwardToDefaultPage();
} else {
alert(data.status);
}
},
data: {
reference: $('#txt-resource-reference').val(),
categoryId: $('#ddl-category').val(),
content: $('#txt-resource-content').val(),
tags: tagAssignments
}
});
}