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