【问题标题】:Posting Complex Object through Ajax to MVC通过 Ajax 将复杂对象发布到 MVC
【发布时间】:2013-02-25 18:24:30
【问题描述】:

我一直在摆弄 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; }
}

查看:

 $.ajax({
 url: '/cd/addCd',
 type: 'POST',
 data:$('form').serialize()
    });

@using(Html.BeginForm()){
@Html.LabelFor(x=>x.CdId)
@Html.TextBoxFor(x=>x.CdId) <br/>
@Html.LabelFor(x=>x.Description)
@Html.TextBoxFor(x=>x.Description)<br />
<input type="submit" value="Submit" id="submit"/>

}

请注意,CdId 和 Description 值已经由 ajax 的 Serialize 函数传递 - 只有 Contents 属性是我无法理解这个想法的属性

更新

我通过创建一个将序列化数据发送到控制器的 ajax sn-p 解决了我的查询:

 $.ajax({
            type: 'POST',
            url: 'http://localhost:54004/Cd/AddCd',
            data: JSON.stringify(formData),
            contentType:'application/json;charset=utf-8'
        })
        .success(function () { })

使用如下formData obj:

   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 实体值及其内容。 希望这对将来的某人有用。

【问题讨论】:

  • 干得好。我知道你去了哪里。

标签: c# javascript asp.net-mvc-3 jquery


【解决方案1】:

不是通过迭代手动构建 JSON 对象,而是以 knockoutmvc(与 MVC 集成的 Knockout)形式的有趣替代方法

查看示例 - http://knockoutmvc.com/BetterList

它无需编写任何额外代码即可发送完整的 JSON 对象。

【讨论】:

    【解决方案2】:

    实现您想要的最佳方法是删除 JQuery 并将您的 HTML.BeginForm 替换为 Ajax.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"/>
    }
    

    现在您的提交按钮将发布到以您的视图命名的方法并发送整个模型

    【讨论】:

    • 是的,感谢您提供的信息,但我要做的是与 ID 和描述一起提交内容列表。数组可以用这个吗?
    • 是的,它会的。数组绑定是通过索引完成的。我将包括和示例
    • 嗨,戴夫,我很高兴知道它会起作用。在等待您的示例时,我将摆弄这个。希望我们可以关闭此查询并帮助其他遇到麻烦的人。
    • @KevinIsNowOnline,这是我的下一个例子。如果您要传递填充模型或想要特定数量的 iof 控件,我们可以将其变成一个循环......如果我遗漏了什么,请澄清。
    • 我已经按照上面更新中的描述解决了我的查询。感谢您帮助我提出如何解决此类问题的想法。再次感谢您对我的建设性帮助。干杯!
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 2015-08-29
    • 1970-01-01
    • 2023-03-17
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多