2011-01-06 14 views
5

私はViewModelを使用するフォームビューを持っています。新しいビューは、アクション "新規"でレンダリングされます。このフォームが提出されると、私は情報をアクション「追加」に送り返します。ASP.Net MVC returnリダイレクトアクションの代わりにモデルの新しいインスタンスでビューを返します

DB上のすべてのアクションが成功した場合は、ビューを更新します。 "Add"アクションの中からviewmodelの新しいインスタンスを作成し、View( "New"、viewModel)を返します。これは私の見方をリフレッシュしません。古い値(送信されたもの)はすべてビューに残ります。 RedirectToActionメソッドを使用せずにページを更新する方法はありますか?

私は、望ましくない結果をもたらす可能性があるため、ModelState.Clearは使用しないでください。それが満たされた値属性でレンダリングされた、またはブラウザがフォームを "オートフィル" されたコードを追加しました

New 

public ActionResult New(string id) 
     { 
      var sysId= new Guid(id); 
....... 
........ 

    string Details = pDto.Name + "(" + pDto.Code + ")"; 

      var vm= new ViewModel(id); 
      vm.Details = Details; 

      return View(vm); 
     } 



public ActionResult Add(ViewModel vm) 
     { 
         ViewModel vm= vm; 

      if (ModelState.IsValid) 
      { 

           var dto= _qRepository.GetFeaturesBy(viewModel.Code); 

       if (dto!= null) 
       { 

        ModelState.AddModelError("Code", "Code is already in Use."); 

        return View("New", viewModel); 
       } 

       _productService.AddFeature(..........); 
       // ModelState.Clear(); -- this works   
       vm= new ViewModel(vm.pId) { Message = "Code" + viewModel.Code + " was added ......", Details = vm.Details }; 

      } 


      return View ("New", vm); 

     } 
+0

現在行っている作業のコードを投稿できますか? –

+0

私はコードを投稿しました - – TheMar

答えて

5

post-redirect-getパターンに従うようにしてください。あなたがしないのは、投稿が失敗したときだけで、クライアントがフォームを再投稿できるように検証エラーを返すことです。ポストアクションメソッドからビューを返すと、これが起こります。これらのフォームの値はすべて、フォーム上で再び使用されるのを待ってModelStateに浮かんでいます。

RedirectToAction("New")は、ユーザーが別のアイテムをすぐに追加できるようにする場合に使用できます。また、両方のアクションがNewという名前になり、[HttpPost]属性とPostModelパラメータを持つ投稿バージョンを飾るようにも聞こえます。あなたがポストし、2つの異なるアクションの間に取得する場合は、HTMLフォーム上でアクションを明示的に設定し、検証失敗の正しいビューを返すことを忘れないでください。

+0

これは私の最初のMVCプロジェクトなので、私は最良の方法とポストリダイレクトに固執したいと思います。ありがとうございました – TheMar

0

- ?

編集1、ありがとう

RedirectToActionによって302の応答が発生し、新しいフォームに新しい「Get」が発生します。

+0

最初にインスタンス化されたときに、いくつかの値を持つView Modelを設定して、同じ値を再度照会しないことを望みます。これが新しいアクションには行かず、新しいビューモデルにパラメータを投稿する(投稿されたビューモデルから) – TheMar

4

お使いのモデルはきれいにリフレッシュされています。

問題は、渡された新しいモデルを使用する前に、HTMLHelpersがViewStateおよびModelStateのデータを最初に探すことです。

ModelStateをクリアするか、ModelStateのエントリを手動で変更することはほとんどできません。

+0

あなたはClearメソッドを安全に使うことを検討しますか?それは私が必要とするものです。 – TheMar

+0

私は適切なときはいつでもそれを使います。 – jfar

関連する問題