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解决方案)
有人能给我指出一些相关例子学习材料的正确方向吗?
提前谢谢。
我会创建一个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;
});
});