2017-01-06 6 views
0

コントローラに2つのインデックスメソッドがあります。最初にページをロードして1つは投稿を受け入れ、送信されたデータに基づいて同じビューをリロードします。POSTで同じコントローラで別のメソッドにリルートする

[HttpGet] 
    public ActionResult Index() 
    { 
     loads page with viewmodel containing a searchobject that is submitted with a form on the page 
    } 

    [ValidateAntiForgeryToken] 
    [HttpPost] 
    public ActionResult Index(SearchModel Model) 
    { 
     takes form submit and reloads page based on search results 
     return View(Model); 
    } 

私は同じコントローラにビュー/メソッドを追加しています。私がしたいのは、add関数が成功したときです。私は、インデックスのPOST版を呼び出して、追加したばかりの項目のIDを渡したいと思います。ここ

は、私がこれまで持っているものです。

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Add(AddModel addmodel) 
    { 
     do stuff 

     var status = client.Add(dto); 

     if (!status) 
     { 
      return View(AddModel); 
     } 
     SearchModel = new SearchModel(); 
     SearchModel.ID= addmodel.ID; 
     return Index(search, null); 
    }    

これは、POSTインデックスメソッドに入るが、それはその方法を去った後、それが戻って追加になり、検索のviewmodelに追加ページをロードしようとすると、明らかに投げます例外。

私のオプションはこれのような何かをすることですか?

+0

をユーザーがポストや 'Index'後にアドレスバーに' Add'のURLを見たいですか?あなたのケースでは、私は、ユーザーが 'Add' URLを見ているが、インデックスの内容を見ていると思う。代わりに 'RedirectToAction'を試してください。しかし、POSTを使うことはできません。 –

答えて

0

デフォルトでは、View(Model)は現在のアクションの名前を使用します(現在のメソッド名ではIndexではなく、あなたのケースでは-Addにルーティングされます)。

修正:明示的にビュー名を指定します。

public ActionResult Index(SearchModel Model) 
{ 
    takes form submit and reloads page based on search results 
    return View("Index", Model); 
} 
関連する問題