Отправить модель просмотра из ajax в контроллер - PullRequest
6 голосов
/ 20 апреля 2011

Можно ли создать объект в представлении и отправить его на контроллер через ajax?

с помощью

$.ajax({
              type: "POST", etc....

???Я хочу отправить объект типа, который я получаю в виде как

@model Project1.ViewModels.ModelSample

Ответы [ 3 ]

9 голосов
/ 20 апреля 2011

Это возможно

Это вполне (и легко) возможно.

А как насчет сложных объектов?

@ xixonia предоставили всю информацию, которая может вам понадобиться для этого.Но эти примеры довольно просты и могут не предоставлять информацию, если у вас есть какие-то сложные объекты, такие как:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }

    public Person Spouse { get; set; }

    public IList<Person> Children { get; set; }
}

Любой объект, имеющий более одного уровня свойств в своем дереве, рассматривается как сложныйобъект. Использование техники, предоставленной @xixonia, в этом случае не сработает .

Поэтому, если вы хотите использовать такой сценарий, я предлагаю вам прочитать это сообщение в блоге , который подробно описывает всю проблему, а также предоставляет довольно простой плагин jQuery, который позволяет отправлять даже сложные объекты в действия контроллера MVC Asp.net, которые будут привязаны к модели вашего сложного сильного типа.

Другие посты в этом же блоге также могут оказаться полезными:

Если вы будете использовать Ajax вместе с Asp.net MVC, вы найдете эти сообщения очень полезными и сэкономите большую часть вашеговремя разработки, когда вы сталкиваетесь с такими проблемами.

4 голосов
/ 13 августа 2011

У меня так получилось:

$.post("/Controller/Action", $("#form").serialize(), function(json) {       
        // handle response
}, "json");

[HttpPost]
public ActionResult TV(MyModel id)
{
    return Json(new { success = true });
}
3 голосов
/ 20 апреля 2011

Можно ли создать объект в представлении и отправить его на контроллер через ajax?

Абсолютно.Для этого можно использовать привязку модели ASP.NET MVC.

var data =
{
    Id: 5,
    Value: "Hello, world!"
};

$.post('Home/MyAction', data);

И у вас должно быть соответствующее POCO:

public class MyPoco
{
    public int Id { get; set; }
    public string Value { get; set; }
}

И действие, которое связывает вашу модель:

public ActionResult MyAction(MyPoco myPoco)
{
    if(ModelState.IsValid)
    {
        // Do stuff
    }
}

Это должно автоматически десериализовать ваш запрос в POCO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...