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

本文关键字:实体 添加 对象 一个 MVC | 更新日期: 2023-09-27 17:59:03

我有一个这样的类:

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;}
}

我想要一个插入成员类的页面,我对此很满意。我的问题在于如何在同一页面上为成员添加多个注释?

对此,最好的方法是什么?(也许是一些显示note类子表单的ajax解决方案)

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

提前谢谢。

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

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

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

另一种选择可能是使用JQuery。

以下是两者的一个很好的例子:将Ajax.BeginForm与ASP.NET MVC 3 Razor 一起使用

更新:我已经调整了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);
    }

视图:

@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" />
}

使用JQuery:

视图:

@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" />
}

index.js:

$(function () {
    $('form').submit(function () {
        if ($(this).valid()) {
            $.ajax({
                url: this.action,
                type: this.method,
                success: function (result) {
                    $('#result').html(result);
                }
            });
        }
        return false;
    });
});