J'ai deux balises méta dans la page maître _Layout.cshtml et maintenant je veux ajouter des balises méta dans la page d'affichage de quelqu'un.cshtml.
et j'essaie aussi avec ce code
mettre dans la page principale _layout.cshtml @RenderSection("metatags",false);
mettre dans quelqu'un.cshtml comme @section metatags { <meta ... /> }
mais pas obtenir le succès.
et essayez aussi avec add meta tag jquery mais ne fonctionnera pas bien.
J'ai trouvé un moyen qui fonctionne pour le moment.
Cette solution utilise principalement quand plusieurs pages maîtres.
Dans les contrôleurs/actions, attribuez les méta-informations dont vous avez besoin pour cette vue.
ViewBag.Title = "some title";
ViewBag.MetaDescription = "some description";
Dans la vue ou la page maître, obtenez les méta-informations dont vous avez besoin pour cette vue.
@if(ViewBag.MetaDescription != null)
{
<meta name="description" content="@ViewBag.MetaDescription" />
}
@if(ViewBag.MetaKeywords != null)
{
<meta name="keywords" content="@ViewBag.MetaKeywords" />
}
Ça devrait marcher.
Voici ma page maître _Layout.cshtml
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
@RenderSection("metatags", false)
<title>My ASP.NET Application</title>
</head>
<body>
@RenderBody()
</body>
</html>
Voici le fichier index.cshtml
@section metatags
{
<meta name="test" content="test"/>
<meta name="test2" content="test"/>
}
<div>Page content</div>
Le résultat
<html>
<head>
<meta charset="utf-8">
<meta name="test" content="test">
<meta name="test2" content="test">
<title>My ASP.NET Application</title>
</head>
<body>
<div>Page content</div>
</body>
</html>
Si vous utilisez des dispositions imbriquées, vous devez suivre ces instructions:
@RenderSection dans les modèles de rasoir imbriqués
La technique que vous utilisez devrait fonctionner, sinon, c'est peut-être la raison.
Mais en regardant l'utilisation prévue dans votre propre réponse, si vous avez seulement besoin de modifier les mots-clés et les balises de description, il existe des API dans NopCommrece.
Dans votre mise en page principale:
<meta name="description" content="@(Html.NopMetaDescription())" />
<meta name="keywords" content="@(Html.NopMetaKeywords())" />
et dans les fichiers cshtml du client
@{
Html.AddMetaDescriptionParts(Model.MetaDescription);
Html.AddMetaKeywordParts(Model.MetaKeywords);
}
Il existe de nombreux exemples pour cela dans le code NopCommerce.
ici est un bon exemple sur la façon de créer dynamiquement des balises méta in asp.net mvc:
public string HomeMetaTags()
{
var strMetaTag = new StringBuilder();
strMetaTag.AppendFormat(@"<meta content='{0}' name='Keywords'/>","Home Action Keyword");
strMetaTag.AppendFormat(@"<meta content='{0}' name='Descption'/>", "Home Description Keyword");
return strMetaTag.ToString();
}
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewBag.MetaTag = HomeMetaTags();
return View();
}
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
@Html.Raw(ViewBag.MetaTag)
</head>