編集
私のフォームは、コンテンツとオプションを更新するAjax
ために正しくなります。送信はをクリックしてください。Id
replace
<input type="submit" value="submit!" />
Problem
:クリックしたときsubmit
、更新は表示されませんでした。2回目の試行で期待どおりの結果が得られました。ページを更新したとき、失われたレコード(最初のヒットが成功した)はその場でした。
モデル
[Serializable]
public abstract class AbstractEntity {
public Guid Id { get; set; }
public DateTime LastModified { get; set; }
}
[Serializable]
public class Product : AbstractEntity {
public Product() {
this.Attachments = new HashSet<Attachment>();
}
public String Title { get; set; }
public String Commentary { get; set; }
public DateTime PlacedOn { get; set; }
public String User { get; set; }
public ICollection<Attachment> Attachments { get; set; }
}
[Serializable]
public class Attachment {
public String MimeType { get; set; }
public String Description { get; set; }
public String Filename { get; set; }
}
コントローラ
[HandleError]
public class ProductController : Controller {
private readonly IDocumentSession documentSession;
public ProductController(IDocumentSession documentSession) {
this.documentSession = documentSession;
}
public ActionResult ListRecent() {
return View(ListAll());
}
[Audit, HttpPost]
public ActionResult Delete(Guid id) {
documentSession.Delete<Product>(documentSession.Load<Product>(id));
documentSession.SaveChanges();
return PartialView("ProductsList", ListAll());
}
[Audit, HttpPost]
public ActionResult Create(Product product) {
if(ModelState.IsValid) {
documentSession.Store(product);
documentSession.SaveChanges();
}
return PartialView("ProductsList", ListAll());
}
private IEnumerable<Product> ListAll() {
return documentSession.Query<Product>().ToArray();
}
}
ビュー(「スクリプトなし」)
レイアウト
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/stylesheets/normalize.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/stylesheets/site.core.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.7.2.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
</head>
<body>
<div id="main-wrapper">
<div id="header">[@Html.ActionLink("List", "ListRecent", "Product")]</div>
<div id="content">@RenderBody()</div>
</div>
</body>
ListRecent.cshtml
@model IEnumerable<lamp.DomainLayer.Entities.Product>
@{
ViewBag.Title = "ListRecent";
var options = new AjaxOptions {
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "productsList"
};
}
<h2>List</h2>
@Html.Partial("ProductsList", Model)
@using(Ajax.BeginForm("Create", "Product", options)) {
<fieldset>
<p>
<label class="autoWidth">Title</label>
@Html.Editor("Title")
@Html.ValidationMessage("Title")
</p>
<p>
<label class="autoWidth">Commentary</label>
@Html.TextArea("Commentary")
@Html.ValidationMessage("Commentary")
</p>
@* Some fields I have omitted.. *@
<input type="submit" value="submit" />
<input type="reset" value="clear" />
</fieldset>
}
ProductsList.cshtml
@model IEnumerable<lamp.DomainLayer.Entities.Product>
@{
var options = new AjaxOptions {
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "productsList"
};
}
<div id="productsList">
@foreach(var p in Model) {
<div class="productCard">
<p class="title"><strong>Title</strong>: @p.Title</p>
<p class="author"><strong>User</strong>: @p.User</p>
<p class="date"><strong>Placed on</strong>: @idea.PlacedOn.ToShortDateString()</p>
<p class="link">@Html.ActionLink("details", "Details", "Product")</p>
<p class="link">
@using(Ajax.BeginForm("Delete", "Product", new { id = p.Id }, options)) {
<input type="submit" value="you!" />
}
</p>
</div>
}
</div>