在同一视图中将值从一个表单持久存储到另一个表单

时间:2018-05-14 21:41:32

标签: c# asp.net-mvc

我的观点有两种形式......

@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
     }

1 个答案:

答案 0 :(得分:0)

您可以尝试在控制器内部使用

TempData.Peek("Model")

而不是

TempData["Model"]

TempData标记与一次呼叫/使用后要删除的密钥相关联的数据。通过使用peek方法,您可以查看与键关联的值而不删除它。由于这种行为会在一次使用后自行删除,因此您必须查看或保持数据超过一次使用。

另一种方式是

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

更详细,更清晰的解释:TempData keep() vs peek()