필자는 mvc3 metatag helper를 작성했습니다. (필요한 경우) 여러 언어를 사용하는 경우이 자원에서 작동합니다
public enum MetatagType
{
/// <summary>
/// Used for Title meta tag.
/// </summary>
Title,
/// <summary>
/// Used for Description and keyword meta tag.
/// </summary>
MetaData,
/// <summary>
/// Used for noindex, nofollow meta tag.
/// </summary>
Robots
}
public static class MetatagExtensions
{
#region Public Methods
public static MvcMetaTag MetaTag(this HtmlHelper helper, MetatagType metaType)
{
return new MvcMetaTag(helper, metaType);
}
#endregion
public sealed class MvcMetaTag
{
#region Constructors and Destructors
public MvcMetaTag(HtmlHelper helper, MetatagType metaType)
{
this.Helper = helper;
this.MetaType = metaType;
}
#endregion
#region Properties
/// <summary>
/// Gets or sets Helper.
/// </summary>
private HtmlHelper Helper { get; set; }
/// <summary>
/// Gets or sets MetaType.
/// </summary>
private MetatagType MetaType { get; set; }
#endregion
#region Public Methods
public MvcHtmlString Render()
{
var sb = new StringBuilder();
if (this.Helper.ViewContext.RouteData.DataTokens.ContainsKey("area"))
{
sb.Append(this.Helper.ViewContext.RequestContext.RouteData.DataTokens["area"].ToString().ToLower());
sb.Append('_');
}
sb.Append(this.Helper.ViewContext.RequestContext.RouteData.Values["controller"].ToString().ToLower());
if (this.Helper.ViewContext.RequestContext.RouteData.Values["action"].ToString().ToLower() != "index")
{
sb.Append('_');
sb.Append(this.Helper.ViewContext.RequestContext.RouteData.Values["action"].ToString().ToLower());
}
var resourcemng = SharedResources.ResourceManager;
var meta = new StringBuilder();
switch (this.MetaType)
{
case MetatagType.MetaData:
meta.AppendLine(
String.Format(
"<meta name=\"description\" content=\"{0}\" />",
this.Helper.ViewData["Description"]
?? resourcemng.GetString(string.Format("md_{0}", sb)) ?? string.Empty));
meta.AppendLine(
String.Format(
"<meta name=\"keywords\" content=\"{0}\" />",
this.Helper.ViewData["Keywords"]
?? resourcemng.GetString(string.Format("mk_{0}", sb)) ?? string.Empty));
break;
case MetatagType.Robots:
meta.AppendLine(
String.Format(
"<meta name=\"robots\" content=\"{0}\" />",
this.Helper.ViewData["Robots"]
?? resourcemng.GetString(string.Format("mr_{0}", sb)) ?? string.Empty));
break;
case MetatagType.Title:
meta.AppendLine(
(string)(this.Helper.ViewData["Title"]
?? resourcemng.GetString(string.Format("mt_{0}", sb)) ?? string.Empty));
break;
}
return new MvcHtmlString(meta.ToString());
}
#endregion
}
}
당신과 같이 사용할 파일을 당신의 _Layout.cshtml에서 다음
: ...
<head runat="server">
<title>@Html.MetaTag(MetatagType.Title).Render()</title>
@Html.MetaTag(MetatagType.MetaData).Render()
...
리소스 파일에 다음을 추가해야합니다 (컨트롤러 -> 홈, 액션 -> 인덱스) :
mt_home -> 홈페이지 제목
md_home -> 여기 홈페이지의 설명
mk_home -> 페이지에 대한 mt_home_about에 대한 홈페이지 키워드
-> 등 제목 에 대한
또한 특정 자원의 메타 데이터를 덮어 쓰기하는 옵션이
그래서 Index.cshtml 같은 전망 :
@{
ViewBag.Title = "New TITLE";
ViewBag.Description = "New Description";
}
[asp.net의 MVC의
가능한 중복 - INC위한 전략 메타 키워드 및 설명과 같은 SEO 정보를 luding] (http://stackoverflow.com/questions/4263568/asp-net-mvc-strategy-for-including-seo-information-such-as-meta-keywords-andde) – jgauffin