web-dev-qa-db-ja.com

cshtmlページからのリダイレクト

データセットの結果に応じて別のビューにリダイレクトしたいのですが、現在表示しているページに戻り続けるため、理由を特定できません。アクションが呼び出される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>
25
Jed I

これに変更:

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

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

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

そのため、そのアクションのコントローラーも実行され、ビューに必要なモデルを追加します。

ソース
ビューから別のビューへのリダイレクト

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

7
Madushan

これは明らかに、ビュー内のコントローラーロジックの悪いケースです。これをコントローラーで実行し、目的のビューを返すことをお勧めします。

[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を使用

1
Gecko IT

この行を使用して、同じコントローラのメソッドに移動できます。そのアクションにいくつかのパラメータを渡したい場合は、内部(new {})を記述することで実行できます。注:-必要なだけパラメータを追加できます。

@ Html.ActionLink( "MethodName"、new {parameter = Model.parameter})

0
sachin singh