簡體   English   中英

獲取值以在同一視圖中從一種形式持久化到另一種形式

[英]Getting a value to persist from one form to another in the same view

我的觀點有兩種形式...

@using (Html.BeginForm("Upload", "CSV", 
null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{

   --file picker--

    <div class="form-group">
        <input type="submit" value="Upload" class="btn btn-default" />
    </div>

}

@using (Html.BeginForm("Add", "CSV", 
null, FormMethod.Post, new { enctype   = "multipart/form-data" }))

{

   --- other functionality--

     <div class="form-group">
     <input type="submit" value="Add" id="ShortURL" class="btn btn-default" />
     </div>

}

該視圖鏈接到帶有ID字段的模型。 到該視圖時,我從另一個視圖傳遞ID,我需要執行“添加”方法。 如果我先執行“添加”,它就可以正常工作。
但是,如果我先執行“上傳”,那么當它返回到控制器時,我會丟失ID。 先進入Upload方法然后再進入Add方法后,如何存儲ID?

以下是相關的控制器方法...

[HttpPost]
    public ActionResult Upload(HttpPostedFileBase upload)
    {
        if (ModelState.IsValid)
        {
            if (TempData["Model"] != null)
            {
                var data = TempData["Model"] as CSV;
                CSV UploadData = data;
                UploadData.ID = UploadData.Upload(upload, data.ID);
                return View("CSV", UploadData);
            }
        }
       return View("CSV");
   }


    public ActionResult CSV(CSV Model)
    {
        TempData["Model"] = Model;
        return View("CSV",Model);
    }

   [HttpPost]
    public ActionResult Add(CSV Model)
    {
      //need to use the ID field in here
     }

您可以嘗試在控制器內部使用

TempData.Peek("Model")

代替

TempData["Model"]

TempData標記與一次呼叫/使用后要刪除的密鑰相關的數據。 通過使用peek方法,您可以查看與鍵關聯的值,而無需刪除它。 由於這種行為,在一次使用后會自行刪除,因此您必須窺視或保持一次使用后的數據持久性。

另一種方式是

TempData["model"]
// some code
TempData.Keep("model")

更詳細,更清晰的解釋: TempData keep()vs peek()

暫無
暫無

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

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