C# 通过Ajax将复杂对象发布到MVC

C# 通过Ajax将复杂对象发布到MVC,c#,javascript,asp.net-mvc-3,jquery,C#,Javascript,Asp.net Mvc 3,Jquery,我已经摆弄MVC有一段时间了,我对创建一个微型应用程序感兴趣,它可以在一张cd下记录所有cd内容。目前我的主要障碍是如何将内容列表与其他属性值一起传递给Cd.class public class Cd { public int CdId { get; set; } public string Description { get; set; } public virtual ICollection<Content> Contents { get; set; }

我已经摆弄MVC有一段时间了,我对创建一个微型应用程序感兴趣,它可以在一张cd下记录所有cd内容。目前我的主要障碍是如何将内容列表与其他属性值一起传递给Cd.class

public class Cd
{
    public int CdId { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Content> Contents { get; set; } 
}

public class Content
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string ContentType { get; set; }
}
使用以下表单数据对象:

   var formData = {
        'Description': "Learning Visual Studio 2012",
        'CdId': 1,
        'Contents': [{ "Id": 1, "Name": "Video #1", "ContentType": "Mp4" }, { "Id": 2, "Name": "Video #2", "ContentType": "Mp4" }]
    };
现在控制器正在接收完整的Cd实体值集及其内容。
希望这对将来的人有用。

实现所需的最好方法是删除JQuery并用Ajax.BeginForm替换HTML.BeginForm

@using(Ajax.BeginForm()){
@Html.LabelFor(x=>x.CdId)
@Html.TextBoxFor(x=>x.CdId) <br/>
@Html.LabelFor(x=>x.Description)
@Html.TextBoxFor(x=>x.Description)<br />

@Html.TextBoxFor(x=>x.Contents[0].Id)<br />
@Html.TextBoxFor(x=>x.Contents[0].Name)<br />
@Html.TextBoxFor(x=>x.Contents[0].ContentType)<br />
@Html.TextBoxFor(x=>x.Contents[1].Id)<br />
@Html.TextBoxFor(x=>x.Contents[1].Name)<br />
@Html.TextBoxFor(x=>x.Contents[1].ContentType)<br />
<input type="submit" value="Submit" id="submit"/>
}
@使用(Ajax.BeginForm()){
@LabelFor(x=>x.CdId)
@Html.TextBoxFor(x=>x.CdId)
@LabelFor(x=>x.Description) @Html.TextBoxFor(x=>x.Description)
@Html.TextBoxFor(x=>x.Contents[0].Id)
@Html.TextBoxFor(x=>x.Contents[0].Name)
@Html.TextBoxFor(x=>x.Contents[0].ContentType)
@Html.TextBoxFor(x=>x.Contents[1].Id)
@Html.TextBoxFor(x=>x.Contents[1].Name)
@Html.TextBoxFor(x=>x.Contents[1].ContentType)
}

现在,您的Submit按钮将发布到一个以视图命名的方法,并发送整个模型,而不是通过迭代来手动构建JSON对象,还有一个有趣的替代方法是knockoutmvc(与MVC集成的Knockout)

检查示例-


它发送一个完整的JSON对象,而不编写任何额外的代码

是的,谢谢你提供的信息,但我正在尝试做的是提交与Id和描述是一个内容列表。一个数组可以处理这个吗?是的,它可以。数组绑定是通过索引完成的。我将包括并举例嗨,戴夫,我很高兴知道它会起作用。在等待你的例子时,我会摆弄这个。希望我们能关闭此查询并帮助其他有困难的人。@KevinIsNowOnline,这是我的下一个例子。如果您正在传递一个填充的模型或想要一个特定数量的iof控件,那么我们可以将其设置为一个循环。。。如果我遗漏了什么,请澄清。我已经按照上面的更新解决了我的问题。谢谢你帮我想出了一个解决这类问题的办法。再次感谢你建设性地帮助我。干杯干得好我知道你去哪里了。
   var formData = {
        'Description': "Learning Visual Studio 2012",
        'CdId': 1,
        'Contents': [{ "Id": 1, "Name": "Video #1", "ContentType": "Mp4" }, { "Id": 2, "Name": "Video #2", "ContentType": "Mp4" }]
    };
@using(Ajax.BeginForm()){
@Html.LabelFor(x=>x.CdId)
@Html.TextBoxFor(x=>x.CdId) <br/>
@Html.LabelFor(x=>x.Description)
@Html.TextBoxFor(x=>x.Description)<br />

@Html.TextBoxFor(x=>x.Contents[0].Id)<br />
@Html.TextBoxFor(x=>x.Contents[0].Name)<br />
@Html.TextBoxFor(x=>x.Contents[0].ContentType)<br />
@Html.TextBoxFor(x=>x.Contents[1].Id)<br />
@Html.TextBoxFor(x=>x.Contents[1].Name)<br />
@Html.TextBoxFor(x=>x.Contents[1].ContentType)<br />
<input type="submit" value="Submit" id="submit"/>
}