0

データ行を表示するインデックス ページがあります。行を編集しようとすると、Edit ActionResult がヒットし、編集するデータが表示されます。次に変更をコミットすると、HttpPost ActionResult がヒットし、データが保存されます。

インデックス ページに戻って保存された変更を確認できますが、データを再度編集しようとすると、Edit ActionResult が起動されず、F5 を押して Edit ActionResult が起動されるまで古いデータが表示されます。リフレッシュされます。

ハード リフレッシュを行わなくても、Edit ActionResult が毎回ヒットするようにするにはどうすればよいでしょうか。

ありがとう!

コントローラーの編集 ActionResult は次のとおりです。

    [CustomAuthorizePDG]
    public ActionResult Edit(int id = 0)
    {
        var model = this._db.ProductApprovals_ProductApproval.Find(id);
        if (model == null) {
            return HttpNotFound();
        }
        var spServer = ConfigurationManager.ConnectionStrings["SPServer"].ConnectionString;
        ViewBag.ProductStatusId = new SelectList(this._db.ProductApprovals_ProductStatus, "ProductStatusId", "ProductStatus", model.ProductStatusId);
        return View(model);
    }

そして HttpPost の ActionResult:

    [CustomAuthorizePDG]
    [HttpPost]
    [ValidateAntiForgeryToken]
    [ErrorHandler]
    public ActionResult Edit(ProductApprovals_ProductApproval model, HttpPostedFileBase file)
    {
        if (ModelState.IsValid) {
                if (file != null && file.ContentLength > 0) {
                    var sp = new ProductApprovalDataContext(new Uri("http://sp-appcentral-int/ProductApproval/_vti_bin/ListData.svc"))
                    {
                        Credentials = CredentialCache.DefaultNetworkCredentials
                    };

                    var productApprovalForm = sp.ProductApprovalForm.Where(x => x.ProductApprovalId == model.ProductApprovalId.ToString(CultureInfo.InvariantCulture)).FirstOrDefault();

                    if (productApprovalForm != null) {
                        var fileName = Path.GetFileName(file.FileName);
                        var extension = Path.GetExtension(file.FileName);
                        var name = string.Format("{0}{1}", model.ProductApprovalId, extension);
                        var path = string.Format("/ProductApproval/Product Approval Form/{0}", name);
                        var contentType = extension == "docx" ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document" : "application/msword";

                        productApprovalForm.CheckedOutTo = new UserInformationListItem
                        {
                            UserName = User.Identity.Name
                        };
                        productApprovalForm.Title = fileName;
                        sp.SetSaveStream(productApprovalForm, file.InputStream, false, contentType, path);
                        sp.SaveChanges(SaveChangesOptions.ReplaceOnUpdate);

                        this.UpdateProductApprovalWithDocument(model, path, fileName);
                    }
                }

                this._db.Entry(model).State = EntityState.Modified;
                this._db.SaveChanges();

            return RedirectToAction("Index");
        }

        ViewBag.ProductStatusId = new SelectList(this._db.ProductApprovals_ProductStatus, "ProductStatusId", "ProductStatus", model.ProductStatusId);

        return View(model);
    }

そのため、HttpPost Edit が起動されると、変更が正常に保存され、インデックス ビューに表示されます。その後 Edit ActionResult に戻ると、更新を実行するまで初期値が表示されます。コードにブレーク ポイントを配置すると、F5 キーを押すまで Edit ActionResult は 2 回目に起動されません...

4

1 に答える 1

0

HttpPost Edit アクションで、RedirectToAction を Index アクションに戻していることを確認してください。問題の説明から、編集アクションから保存編集ビューを表示しているようです。Index アクションにリダイレクトする必要があります。

それでもうまくいかない場合は、インデックス ビューの HTML ソースを調べて、編集 URL がまだ編集アクション メソッドを参照していることを確認します。

于 2013-10-15T20:14:20.167 に答える