问题描述
|
我有这样的课程:
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;}
}
我想要一个插入成员类的页面-很好。我的问题在于如何在同一页面上向成员添加多个注释?
最好的方法是什么? (也许是一些ajax解决方案来显示note类的子表单)
有人能指出一些相关示例学习材料的正确方向吗?
提前致谢。
解决方法
我将创建一个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;
});
});