2012-02-10 38 views
3

嘗試重新發布視圖,但即時獲得我想要的字段爲空。在MVC中的Http發佈後渲染相同的視圖

繼承人的控制器......

public ActionResult Upload() 
    { 
     VMTest vm = new VMTest(); 
     return View(vm); 
    } 

    [HttpPost] 
    public ActionResult Upload(VMTest vm, String submitButton) 
    { 
     if (submitButton == "Upload") 
     { 
      //do some processing and render the same view 
      vm.FileName = "2222";   // dynamic creation of filename 
      vm.File.SaveAs(@vm.FileName); // save file to server 
      return View(vm); 
     } 
     else if (submitButton == "Save") 
     { 
      //read the file from the server 
      FileHelperEngine engine = new FileHelperEngine(typeof(PaymentUploadFile)); 
      PaymentUploadFile[] payments = (PaymentUploadFile[])engine.ReadFile(@vm.FileName); // the problem lays here @vm.FileName has no value during upload 

      //save the record of the file to db 
      return View("Success"); 
     } 
     else 
     { 
      return View("Error"); 
     } 
    } 

我已經有一個@ Html.HiddenFor(型號=> Model.FileName)我的觀點裏。

但是我仍然得到了Model.FileName的空值。

任何幫助,請

感謝

回答

10

如果您打算修改POST操作您的視圖模型的一些價值觀,你需要首先從ModelState中刪除舊值:

ModelState.Remove("FileName"); 
vm.FileName = "2222"; 

的原因是TextBox,Hidden等Html助手將首先在綁定時使用模型狀態中的值,然後在視圖模型中使用該值。

,而不是另外:

@Html.HiddenFor(model => Model.FileName) 

你應該使用:

@Html.HiddenFor(model => model.FileName) 

公告中表達小寫m

+0

非常感謝。我一直花費幾天來解決這個問題..只有ModelState.Remove是關鍵......謝謝@Darin – roggss 2012-02-10 09:18:51

3

上面的答案是一個很好的答案。您還可以執行以下操作:

public ActionResult Upload() 
{ 
    VMTest vm = new VMTest(); 

    ModelState.Clear(); 

    return View(vm); 
} 

我通常在加載新視圖之前調用ModelState.Clear()。 HiddenFor的sytntax應該是

@Html.HiddenFor(m => m.FileName); 

我希望這有助於。