Перенаправление с страницы 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");

    }

Просмотр я can not get too..

@{
ViewBag.Title = "NoResults";
 }

<h2>NoResults</h2>

Ответы

Ответ 1

Изменить на это:

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

Ответ 2

Было бы безопаснее сделать это.

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

Таким образом, контроллер для этого действия также запускается, чтобы заполнить любую модель, которой требуется представление.

Источник
Перенаправить из представления в другое представление

Хотя, как упоминал @Satpal, я рекомендую вам перенаправить на ваш контроллер.

Ответ 3

Это явно плохой случай логики контроллера в представлении. Было бы лучше сделать это в контроллере и вернуть желаемый вид.

[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 по причинам, описанным здесь: Невозможно получить доступ к ViewBag на частичном представлении в ASP.NET MVC3

Атрибут ChildActionOnly гарантирует, что вы не сможете перейти на эту страницу, выполнив навигацию и что это представление должно отображаться как частичное, таким образом, родительским представлением. cfr: Использование ChildActionOnly в MVC

Ответ 4

Вы можете перейти к методу того же контроллера... используя эту строку, и если вы хотите передать некоторые параметры этому действию, это можно сделать, записав внутри (new {}).. Примечание: - вы можете добавить столько параметров, сколько требуется.

@Html.ActionLink( "MethodName", новый {параметр = Model.parameter})