2013-07-15 8 views
19

データセットの結果に応じて別のビューにリダイレクトしたいが、私が現在行っているページに戻ってきて、理由が分からない。私はアクションが呼び出されるifステートメントに落ちますが、ビューを新しいページに戻すと、私は現在のページに戻ります。私はあまりにも取得カントcshtmlページからのリダイレクト

CSHTMLページ

@{ 
ViewBag.Title = "Search Results"; 
EnumerableRowCollection<DataRow> custs = ViewBag.Customers; 

bool anyRows = custs.Any(); 
if(anyRows == false) 
{ 


    Html.Action("NoResults","Home"); 


} 
// redirect to no search results view 

}

コントローラ

public ActionResult NoResults() 
    { 
     return View("NoResults"); 

    } 

ビュー..

@{ 
ViewBag.Title = "NoResults"; 
} 

<h2>NoResults</h2> 
+4

なぜあなたは、コントローラから別のアクションにリダイレクトすることはできませんか? – Satpal

答えて

40

これに変更します

@{ Response.Redirect("~/HOME/NoResults");} 
+0

なぜ私は行動に戻る..私はビューを返すしたい –

5

これを行う方が安全でしょうか。

@{ Response.Redirect("~/Account/LogIn?returnUrl=Products");}

だから、行動のためのコントローラは、すべてのモデルにビューのニーズを取り込むために、同様に動作します。

ソース
Redirect from a view to another view

@Satpalが述べたように、私はあなたのコントローラ上のリダイレクトを行うことをお勧めしますが。

0

これは明らかに、ビュー内のコントローラロジックの悪いケースです。これをコントローラーで行い、目的のビューを返す方がよいでしょう。

[ChildActionOnly] 
public ActionResult Results() 
{ 
    EnumerableRowCollection<DataRow> custs = ViewBag.Customers; 
    bool anyRows = custs.Any(); 

    if(anyRows == false) 
    { 
     return View("NoResults"); 
    } 
    else 
    { 
     return View("OtherView"); 
    } 
} 

NoResults.cshtmlを部分的に変更します。

そして、親ビューでパーシャルビューとしてこれを呼び出す

の理由により
@Html.Partial("Results") 

あなたは結果アクションまたはViewDataDictionaryでモデルとしてお客様のコレクションを渡す必要がありますが、ここで説明:Can't access ViewBag in a partial view in ASP.NET MVC3

ChildActionOnly属性を使用すると、このページをナビゲートすることができず、このビューを部分ビュー、つまり親ビューでレンダリングする必要があります。 CFR:Using ChildActionOnly in MVC

0

あなたが同じcontroller..using方法この行に行くことができる、そしてあなたがそのアクションにいくつかのパラメータを渡したい場合は、それが内部に書き込むことによって行うことができます(新しい{}).. 注: - 必要な数だけパラメータを追加できます。

@ Html.ActionLink( "メソッド名"、新しい{パラメータ= Model.parameter})

関連する問題