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