簡體   English   中英

服務器驗證錯誤后,從局部視圖保持表單狀態

[英]Persist form state from partial view after server validation error

我認為我的問題很普遍,因為我一直在閱讀有關這些時間的信息,但老實說,我對此仍有一些疑問。 我有一個執行這些操作的簡單控制器(據我了解,這遵循PRG模式)

public ActionResult Index()
{
    var partyId = (int) Session["PartyId"];
    var viewModel = _displayBuilder.Build(partyId);
    return View(viewModel);
}

[HttpGet]
public ActionResult AddDocument()
{
    var partyId = (int) Session["PartyId"];
    var viewModel = _createBuilder.Build(partyId);
    return PartialView("_AddDocument", viewModel);
}
[HttpPost]
public ActionResult AddDocument(AddDocumentViewModel viewModel)
{
    var partyId = (int)Session["PartyId"];
    if (ModelState.IsValid)
    {
        _documentsManager.AddDocument(viewModel, partyId);
        return RedirectToAction("Index");
    }
    var newViewModel = _createBuilder.Rebuild(viewModel, partyId);
    return PartialView("_AddDocument", newViewModel);
}

索引視圖將其保存在其中

<div id="addDocument">
    @{ Html.RenderAction("AddDocument"); }
</div>

加上文件清單。

問題是服務器驗證失敗時,因為它僅顯示post方法中所述的partialview。 我希望能夠顯示索引視圖,但又不會丟失表單狀態(包括模型狀態,我想我可以在TempData中傳遞它,但是無論如何我都會丟失發布的字段值)。

我認為可以做些事情。

  1. 將所有內容放在同一視圖中
  2. 與我正在做的相反,將文檔列表創建為部分視圖。
  3. 將表單創建為ajax。 對此不太確定。

有什么我想念的嗎?

我當時正在考慮使此頁面盡可能“聰明”些,因此暫時避免使用ajax,但如果可以肯定是最佳解決方案,那么我肯定會這樣做。 我認為,我仍然可以在局部視圖中維護表單並將其重新用於其他視圖。 我的意思是兩個部分,視圖和用於更新它的列表,對嗎?

謝謝

如果不使用Ajax,我真的看不到任何解決方法,因為您將結果呈現為“新”頁面。

我真正想到的唯一方法是重新加載完整的“索引”以及部分視圖,但是在這種情況下,使用ajax會容易得多。

像這樣:

$.ajax({
    type: "POST",
    url: url,
    contentType: "application/json; charset=utf-8",
    data: data,
    dataType: "html",
    success: function (data) {
        $("#addDocument").html(data);
    }
});

而不是使用

@{ Html.RenderAction("AddDocument"); }

采用

@Html.Partial("_AddDocument")

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM