Je souhaite rediriger vers une vue différente en fonction du résultat d'un ensemble de données, mais je reviens toujours à la page sur laquelle je suis actuellement et ne peux pas comprendre pourquoi. J'abandonne l'instruction if si l'action est appelée, mais dès que la vue est redirigée sur la nouvelle page, elle me renvoie à la page en cours.
Page 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
}
Manette
public ActionResult NoResults()
{
return View("NoResults");
}
Voir je ne peux pas obtenir trop ..
@{
ViewBag.Title = "NoResults";
}
<h2>NoResults</h2>
Changer à ceci:
@{ Response.Redirect("~/HOME/NoResults");}
C'est clairement un mauvais cas de logique de contrôleur dans une vue. Il serait préférable de le faire dans un contrôleur et de retourner la vue souhaitée.
[ChildActionOnly]
public ActionResult Results()
{
EnumerableRowCollection<DataRow> custs = ViewBag.Customers;
bool anyRows = custs.Any();
if(anyRows == false)
{
return View("NoResults");
}
else
{
return View("OtherView");
}
}
Modifiez NoResults.cshtml en partiel.
Et appeler cela comme une vue partielle dans la vue parent
@Html.Partial("Results")
Vous devrez peut-être transmettre la collection Customer en tant que modèle à l'action Result ou à un ViewDataDictionary pour des raisons expliquées ci-dessous: Impossible d'accéder à ViewBag dans une vue partielle dans ASP.NET MVC3
L'attribut ChildActionOnly
fera en sorte que vous ne puissiez pas accéder à cette page en naviguant et que cette vue doit être restituée sous forme partielle, donc par une vue parent. cfr: Utilisation de ChildActionOnly dans MVC
Vous pouvez aller à la méthode du même contrôleur ... en utilisant cette ligne, et si vous voulez passer quelques paramètres à cette action, cela peut être fait en écrivant dedans (nouveau {}) ...__ paramètre comme requis.
@ Html.ActionLink ("MethodName", nouveau {paramètre = Model.parameter})