5
votes

Comment obtenir le nom de l'action actuelle dans la vue

Dans ma page _Layout, j'ai un formulaire de recherche et chaque contrôleur a une vue d'index. Lorsque l'utilisateur clique sur le bouton de recherche, il effectue une recherche dans la vue d'index actuelle.

Je veux afficher le champ de recherche si l'utilisateur est en vue d'index s'il accède à d'autres vues, je voulais le masquer.

Dans mon _Layout

    $("#search").hide();
    $("#BtnSearch").hide();

J'utilise JQuery pour le moment mais il est assez difficile de mettre chaque vue

 <form asp-action="Index" method="get" class="navbar-form form-inline navbar-right">
        <input class="form-control mr-sm-2" id="search" name="search" type="search" placeholder="Search" aria-label="Search">
        <button class="btn btn-outline-success my-2 my-sm-0"  id="BtnSearch" name="BtnSarch" type="submit">Search</button>
    </form>

En gros, dans ma page _Layout, je voulais afficher ou masquer le formulaire de recherche si l'utilisateur est dans la vue d'index. comment puis-je obtenir le nom de la vue actuelle dans la vue _Layout, s'il vous plaît?


2 commentaires

J'ajouterais une nouvelle mise en page sans la recherche et l'attribuerais aux pages de vue d'index


Merci les gars pour toute l'aide. J'aimerais pouvoir en choisir plus d'une comme réponse.


4 Réponses :


1
votes

Vous pouvez ajouter une entrée masquée au fichier de modèles et lui attribuer un identifiant. Ensuite, vous pouvez obtenir l'action et le nom du contrôleur de n'importe où:

<input type="hidden" value="@this.ViewContext.RouteData.Values["action"].ToString()" />
<input type="hidden" value="@this.ViewContext.RouteData.Values["controller"].ToString()" />

Donc, si vous ne les utilisez pas dans JS, vous pouvez déclarer une variable et afficher votre formulaire lorsque l'action est Index. P >

J'espère vous aider.


0 commentaires

2
votes

Fondamentalement, dans ma page _Layout, je voulais afficher ou masquer le formulaire de recherche si l'utilisateur est dans la vue d'index.

Essayez avec les codes ci-dessous:

@if ("Index".Equals(ViewContext.RouteData.Values["Action"].ToString()))
{
    <form asp-action="Index" method="get" class="navbar-form form-inline navbar-right">
        <input class="form-control mr-sm-2" id="search" name="search" type="search" placeholder="Search" aria-label="Search">
        <button class="btn btn-outline-success my-2 my-sm-0" id="BtnSearch" name="BtnSarch" type="submit">Search</button>
    </form>
}

0 commentaires

1
votes

Si vous souhaitez afficher le formulaire de recherche uniquement dans des vues spécifiques, je ne baserais pas cela sur le nom de la vue. À l'avenir, vous pourriez également en avoir besoin dans d'autres vues. Alors, pourquoi ne pas simplement ajouter un drapeau pour afficher le formulaire de recherche dans votre ViewBag. Cela voudra dire, définir cet indicateur dans chaque action "Index", mais vous serez plus flexible quant à son emplacement.

Contrôleur:

@if (this.ViewBag.ShowSearch == true) // explicitly check for true, so not having set the flag in the ViewBag will not pose a problem, i.e. null != true.
{
    <form action="">@* … *@</form>
}

_Layout.cshtml

public ActionResult Index()
{
    this.ViewBag.ShowSearch = true;
    // … your normal code
    return this.View();
}


0 commentaires

2
votes

Cela semble être le candidat idéal pour les assistants de balises mvc.

Vous devrez créer une classe qui hérite de TagHelpers et remplacer la méthode de processus.

If(ViewContext.RouteData.Values[“action”]) != “Index”)
{
    Output.SuppressOutput();
}

Afin d'obtenir le contrôleur et l'action, vous devrez ajouter une propriété à l'assistant de balise:

[HtmlAttributeNotBound]
[ViewContext]
Public ViewContext ViewContext { get; set; }

Maintenant que vous avez le contexte de vue en place, vous pouvez regarder faites quelque chose comme ce qui suit:

[HtmlTargetElement(“website-search”)]
Public class Search : TagHelper
{
    Public WebsiteContext Info { get; set; }

    Public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        Output.TagName = “section”;
        Output.Content.SetHtmlContent(“ HTML for your search form “);
        Output.TagMode = TagMode.StartTagAndEndTag;
    }
}

Vous pouvez ensuite y faire référence en mettant le site Web-helper dans votre vue.

Veuillez consulter le lien suivant pour une introduction sur les assistants de balises https : //docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro? view = aspnetcore-2.2

Il y a la question de débordement de pile suivante détaillant comment exécuter le contrôleur et l'action contre: Savoir sur quelle route l'utilisateur se trouve dans TagHelper dans .NET Core

J'espère que cela vous aidera


0 commentaires