2011-02-10 9 views
4

내 _Layout 페이지에 메타 설명/키워드를 가져 오는 가장 간단한 방법은 무엇입니까? 페이지 제목을 얻는 것과 비슷한 점이 좋을 것입니다. 이러한 MVC 3 면도기 메타 설명/키워드

<title>@ViewBag.Title</title> 
<meta name="keywords" content='@ViewBag.Keywords'/> 
<meta name="description" content='@ViewBag.Description'/> 

으로 내보기 같이 보일 것입니다 :

@{ 
    ViewBag.Title = "Contact Me"; 
    ViewBag.Keywords = "My, keyword, list, etc"; 
} 
+1

가능한 중복 - INC위한 전략 메타 키워드 및 설명과 같은 SEO 정보를 luding] (http://stackoverflow.com/questions/4263568/asp-net-mvc-strategy-for-including-seo-information-such-as-meta-keywords-andde) – jgauffin

답변

4

로보기는 그 책임을지지 않습니다합니다 (뷰 로직을 추가하지 않음). 대신 메타 정보를 지정해야하는 작업 방법입니다.

확인은 여기에 대답의 나 : asp.net mvc - strategy for including SEO information such as meta keywords and descriptions

대답은 여전히 ​​적용, 당신은 ViewData 대신 ViewBag를 사용해야하지만.

+0

건배는 있지만 정의 된 MetaKeywords/MetaDescription 속성입니다. ould 그들을 포함하는 ViewModel을 생성 한 다음 새로운 ViewModel을 사용하여 강력한 형식의 뷰를 생성합니까? 감사합니다 – user547043

+0

당신이 속성을 의미하는 경우 : 당신은 직접 만들어야합니다. ViewBag/ViewData에서 의미하는 경우 : basecontroller (OnActionExecuting 메서드) – jgauffin

+0

속성을 사용하여 데이터베이스에서 키워드를 얻은 방법은 무엇입니까? –

4

필자는 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의