39

データセットの結果に応じて別のビューにリダイレクトしたいのですが、現在表示しているページに何度も戻ってきて、その理由がわかりません。アクションが呼び出される 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>
4

4 に答える 4

76

これに変更します。

@{ Response.Redirect("~/HOME/NoResults");}
于 2013-07-15T12:06:04.440 に答える
11

これを行う方が安全です。

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

そのため、そのアクションのコントローラーも実行され、ビューが必要とするモデルを設定します。

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

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

于 2013-07-15T12:09:39.633 に答える
1

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

[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 を Partial に変更します。

これを親ビューの部分ビューとして呼び出します

@Html.Partial("Results")

ここで説明されている理由により、Customer コレクションをモデルとして Result アクションまたは ViewDataDictionary に渡す必要がある場合があります: ASP.NET MVC3 の部分ビューで ViewBag にアクセスできません

このChildActionOnly属性は、ナビゲートによってこのページに移動できないようにし、このビューを部分ビューとして、つまり親ビューによってレンダリングする必要があることを確認します。cfr : MVC での ChildActionOnly の使用

于 2016-09-03T16:35:42.230 に答える
1

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

@Html.ActionLink("メソッド名", new { パラメータ = Model.パラメータ })

于 2017-06-06T09:49:42.200 に答える