asp mvc3, бланк с скрытым вводом, содержащий массив json - PullRequest
3 голосов
/ 25 марта 2012

У меня есть такая форма:

<form id="orderForm">
    <input name="Customer" value="Mr.Test" />
    <input name="ProductLines" value='[{"Product":{"Name":"Orange","Price":"10"},"amount":"2","total":"20"}, {"Product":{"Name":"Apple","Price":"5"},"amount":"3","total":"15"}]' />
</form>

и контроллер с моделями вида:

[HttpPost]
public ActionResult Save(OrderViewModel vm)
{
    //...
}

public class OrderViewModel
{
    public OrderViewModel() { ProductLines = new List<OrderProductViewModel>(); }
    public string Customer { get; set; }
    public IEnumerable<OrderProductViewModel> ProductLines { get; set; }
}

public class OrderProductViewModel
{
    public ProductViewModel Product { get; set; }
    public int Amount { get; set; }
    public int Total { get; set; }
}

public class ProductViewModel
{
    public string Name { get; set; }
    public int Price { get; set; }
}

можно ли опубликовать эту форму с помощью jquery

      $.post('@Url.Action("Save")', $("#orderForm").serialize(), function (data) {//...}, "json");

и получите заполненную коллекцию ProductLines на стороне сервера.(в настоящее время он всегда пуст)

Спасибо!

1 Ответ

2 голосов
/ 25 марта 2012

Объект публикации необходимо преобразовать в объект json и опубликовать с типом содержимого json. Попробуйте следующее, это может помочь

var results = {};
$.each($("#orderForm").serializeArray(), function (index, item) {
    results[item.name] = item.value;
});
results.ProductLines = $.parseJSON(results.ProductLines);
$.ajax({
    url: '@Url.Action("Save")',
    type: 'post',
    data: JSON.stringify(results),
    contentType: "application/json; charset=utf-8",
    dataType:'json',
    success: function (data) {
        alert("hi");
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...