1

編集

私のフォームは、コンテンツとオプションを更新するAjaxために正しくなります。送信はをクリックしてください。Idreplace<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>
4

2 に答える 2

2

私はそれがIEのせいだと思います(正確には、IEがAJAXリクエストをキャッシュする方法)。ここを見てください-それは解決策かもしれません:

http://viralpatel.net/blogs/ajax-cache-problem-in-ie/

于 2012-07-02T16:42:27.450 に答える
0

Ok。ダリンは正しかった!コントローラコードを次のコードに変更することがわかりました。

private IEnumerable<Product> ListAll() {
    return documentSession
       .Query<Product>()
       .Customize((x => x.WaitForNonStaleResults()))
       .ToArray();
}

すべてを修正します。

.Customize((x => x.WaitForNonStaleResults()))

解決策です!

みんな、ありがとう!

于 2012-07-03T05:49:25.230 に答える