将视图模型从ajax发送到控制器

时间:2011-04-20 02:15:44

标签: asp.net asp.net-mvc asp.net-mvc-2 asp.net-mvc-3

是否可以在视图中创建对象并通过ajax将其发送到控制器?

使用

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

??? 我想发送一个我在视图中收到的类型的对象

@model Project1.ViewModels.ModelSample

3 个答案:

答案 0 :(得分:9)

可能

这是完全(且容易)的可能。

复杂的物体呢?

@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提供的技术将无法在这种情况下工作

因此,如果您还想使用这种场景,我建议您阅读this blog post详细描述整个问题,并提供一个相当简单的jQuery插件,甚至可以发送复杂的对象到Asp.net MVC控制器动作,它将模型绑定到你的任何复杂的强类型。

同一博客上的其他帖子也可能会有所帮助:

如果您将在Asp.net MVC中使用Ajax,您会发现这些帖子非常有用,并且可以在您遇到此类问题时为您节省大量的开发时间。

答案 1 :(得分:4)

这是我的工作方式:

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

[HttpPost]
public ActionResult TV(MyModel id)
{
    return Json(new { success = true });
}

答案 2 :(得分:3)

  

是否可以在中创建对象   视图并将其发送到控制器   通过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。