Ответ 1
Изменить на это:
@{ Response.Redirect("~/HOME/NoResults");}
Я хочу перенаправить на другое представление в зависимости от результата набора данных, но я все время возвращаюсь к странице, на которой я сейчас нахожусь, и не могу понять, почему. Я забираю выражение 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>
Изменить на это:
@{ 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 по причинам, описанным здесь: Невозможно получить доступ к ViewBag на частичном представлении в ASP.NET MVC3
Атрибут ChildActionOnly
гарантирует, что вы не сможете перейти на эту страницу, выполнив навигацию и что это представление должно отображаться как частичное, таким образом, родительским представлением. cfr: Использование ChildActionOnly в MVC
Вы можете перейти к методу того же контроллера... используя эту строку, и если вы хотите передать некоторые параметры этому действию, это можно сделать, записав внутри (new {}).. Примечание: - вы можете добавить столько параметров, сколько требуется.
@Html.ActionLink( "MethodName", новый {параметр = Model.parameter})