3

私はかなり長い間 MVC をいじっていましたが、すべての CD コンテンツを 1 つの 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 エンティティ値の完全なセットを受け取ります。これが将来誰かに役立つことを願っています。

4

2 に答える 2

1

目的を達成する最善の方法は、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"/>
}

これで、[送信] ボタンが、モデル全体を表示して送信することにちなんで名付けられたメソッドに投稿されます

于 2013-03-10T18:52:16.583 に答える
0

JSON オブジェクトを反復して手動で構築する代わりに、knockoutmvc (MVC と統合された Knockout) の形で興味深い代替手段があります。

例を確認してください - http://knockoutmvc.com/BetterList

追加のコードを記述することなく、完全な JSON オブジェクトを送信します。

于 2014-09-17T16:06:28.390 に答える