簡體   English   中英

通過Ajax向MVC發布復雜對象

[英]Posting Complex Object through Ajax to MVC

我一直在擺弄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片段來解決我的查詢:

 $.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實體值及其內容。 希望這對未來的某些人有用。

實現你想要的最好的方法是刪除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"/>
}

現在,您的“提交”按鈕將發布到“查看並發送整個模型”后命名的方法

不是通過迭代手動構建JSON對象,而是以knockoutmvc的形式存在一個有趣的替代方案(Knockout與MVC集成)

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

它發送一個完整的JSON對象,而無需編寫任何額外的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM