C# 通过Ajax将复杂对象发布到MVC
我已经摆弄MVC有一段时间了,我对创建一个微型应用程序感兴趣,它可以在一张cd下记录所有cd内容。目前我的主要障碍是如何将内容列表与其他属性值一起传递给Cd.classC# 通过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; }
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"/>
}