データセットの結果に応じて別のビューにリダイレクトしたいのですが、現在表示しているページに戻り続けるため、理由を特定できません。アクションが呼び出されるifステートメントにドロップしますが、ビューを新しいページに戻すと、現在のページに戻ります。
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>
これに変更:
@{ Response.Redirect("~/HOME/NoResults");}
これを行う方が安全でしょう。
@{ Response.Redirect("~/Account/LogIn?returnUrl=Products");}
そのため、そのアクションのコントローラーも実行され、ビューに必要なモデルを追加します。
@Satpalが述べたように、コントローラーでリダイレクトを行うことをお勧めします。
これは明らかに、ビュー内のコントローラーロジックの悪いケースです。これをコントローラーで実行し、目的のビューを返すことをお勧めします。
[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")
ここで説明する理由により、CustomerコレクションをモデルとしてResultアクションまたはViewDataDictionaryに渡す必要がある場合があります。 ASP.NET MVC3の部分ビューでViewBagにアクセスできません
ChildActionOnly
属性は、ナビゲートしてこのページにアクセスできないようにし、このビューをパーシャルとして、つまり親ビューによってレンダリングする必要があることを確認します。 cfr: MVCでChildActionOnlyを使用
この行を使用して、同じコントローラのメソッドに移動できます。そのアクションにいくつかのパラメータを渡したい場合は、内部(new {})を記述することで実行できます。注:-必要なだけパラメータを追加できます。
@ Html.ActionLink( "MethodName"、new {parameter = Model.parameter})