2012-02-10 6 views
3

ビューを再ポストしようとしましたが、フィールドに空白があります。相続人は、コントローラMVCでHttp Postの後に同じビューをレンダリングする

...

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"); 
     } 
    } 

は、私はすでに私のビュー内(モデル=> Model.FileName)@ Html.HiddenForを持っていました。

しかし、まだModel.FileNameにはnull値があります。

すべてのヘルプPLSの

おかげ

答えて

10

あなたが最初にModelStateから古い値を削除する必要がありPOSTアクションであなたのビューモデルのいくつかの値変更する場合:

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

この理由は、TextBox、HiddenなどのHtmlヘルパーは、バインディング時にまずmodelstateの値を使用し、その後にビューモデルの値を使用します。

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

あなたが使用する必要があります:代わりにも

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

お知らせ式に小文字m

+0

ありがとうございました.. IDはこの問題を解決するために数日を費やしています.. ModelState.Removeだけがキーです...ありがとう@ダーリン – roggss

3

上記の回答は良いです。

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

    ModelState.Clear(); 

    return View(vm); 
} 

私は通常、新しいビューを読み込む前にModelState.Clear()を呼び出します。 HiddenForのsytntaxは

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

である必要があります。

関連する問題