C# MVC 3-向实体添加多个对象

C# MVC 3-向实体添加多个对象,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我有这样的课程: public class member { public string name {get;set;} public IList<Note> notes {get;set;} } public class note { public string text {get;set;} public datetime created {get;set;} } 公共类成员 { 公共字符串名称{get;set;} 公共IList注释{get;set;} } 公开课堂

我有这样的课程:

public class member
{
 public string name {get;set;}
 public IList<Note> notes {get;set;}
}

public class note
{
 public string text {get;set;}
 public datetime created {get;set;}
}
公共类成员
{
公共字符串名称{get;set;}
公共IList注释{get;set;}
}
公开课堂讲稿
{
公共字符串文本{get;set;}
已创建公共日期时间{get;set;}
}
我希望有一个插入成员类的页面,我对此很满意。我的问题在于如何在同一页面上向成员添加多个注释

最好的办法是什么?(可能是一些ajax解决方案,用于显示note类的子表单)

有人能为我指出一些相关示例学习材料的正确方向吗


提前感谢。

我会创建一个Ajax表单,将其发布到控制器上名为
AddNote(AddNoteViewModel-viewModel)
的方法。AddNoteViewModel将包含创建新便笺所需的所有信息。AddNote操作方法将添加新注释、保存更改并返回给定成员的注释列表。您可以对AddNote返回的内容使用部分视图

在Ajax表单上,您应该将
UpdateTargetId
设置为要使用最新注释列表更新的
的id

另一种选择可能是使用JQuery

以下是两者的一个很好的例子:

更新:我改编了Darin Dimitrov的例子(来自链接),以适合您的场景。这是我脑子里想不到的,所以不是完美的,但它应该给你一个不错的起点

型号:

public class AddNoteViewModel
{
    [Required]
    public int MemberId { get; set; }
    [Required]
    public string Text { get; set; }
}
控制器:

    [HttpPost]
    public ActionResult AddNote(AddNoteViewModel model)
    {
        var member = //Get member from db using model.MemberId
        member.Notes.Add(new Note{Text = model.Text, Created = DateTime.Now});
        //SaveChanges();

        var notes = //Get notes for member

        return View(notes);
    }
视图:


谢谢你的回复,今晚晚些时候我会试一试,让你知道我的感受on@NinjaNye一个问题-如果我想向尚未持久化到数据库的成员添加注释,该怎么办?您可以创建一个新的成员类,并在调用SaveChanges()之前向该类添加注释,EF通常会为您进行排序。您需要更改AddNoteViewModel以获取创建成员所需的所有信息。棘手的部分将是发布多个注释。如果您有选择,我会将工作流更改为,以便首先创建一个成员,然后将注释添加到持久化工作流中member@NinjaNye这就是我所想的——我会在成员被持久化后添加注释。为您的帮助干杯。@NinjaNye还认为将“添加注释”视图创建为局部视图,然后将其呈现在成员窗体下方是一个好方法吗?我回答了一些问题,可能会有所帮助:-)
@model AppName.Models.AddNoteViewModel

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

<div id="result"></div>

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
{
    @Html.HiddenFor(x => x.MemberId)
    @Html.EditorFor(x => x.Text)
    @Html.ValidationMessageFor(x => x.Text)
    <input type="submit" value="OK" />
}
@model AppName.Models.AddNoteViewModel

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/index.js")" type="text/javascript"></script>

<div id="result"></div>

@using (Html.BeginForm())
{
    @Html.HiddenFor(x => x.MemberId)
    @Html.EditorFor(x => x.Text)
    @Html.ValidationMessageFor(x => x.Text)
    <input type="submit" value="OK" />
}
$(function () {
    $('form').submit(function () {
        if ($(this).valid()) {
            $.ajax({
                url: this.action,
                type: this.method,
                success: function (result) {
                    $('#result').html(result);
                }
            });
        }
        return false;
    });
});