2010-04-29 37 views
5

Web sitelerimizdeki SEO okunabilirliğini en iyi duruma getirmeye çalışıyorum ve karşılaştığım bir sorun, ASP.NET'in MasterPage'in başlık öğesini kesmesidir. Benim AnaSayfa içinde gibi Girilen (el çizgi <% %> etiketler neden sonları kaldırmak için yeniden biçimlendirilmiş):Başlık Elemanı'nda ASP.NET Satır Sonları

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /> - <%=WebsiteSettings.WebsiteName %></title> 

Bu çıkış Aldığım:

<title> 
    Home 
- Website Name</title> 

Eğer ASP.NET ekliyor görebileceğiniz gibi <asp:ContentPlaceHolder />'un yerine gelen satır sonları, satır sonu ile başlamak ve sonlandırmak için Visual Studio otomatik biçimlerini <asp:Content /> olarak gösterir. Açıkçası, bu Visual Studio biçimlendirme seçeneklerinde engellenebilir, ancak bu ideal değildir, çünkü yalnızca TitleContent yer tutucusunun geri kalanını değil, bu davranışı kaldırmak istiyorum.

Başlığımın işlenmeden önce kırpılmasını sağlayabilmemin herhangi bir yolu var mı? MVC kullanıyorum, bu yüzden kod geri kabul edilebilir bir seçenek değil.

+3

Gerçekten önemli mi? Whitespace HTML'de önemli değil ve herhangi bir ciddi arama motoru ayrıştırıcısının bu sorunu bulacağından şüphe duyuyorum. –

cevap

2

sen kee izin vermelidir aşağıdaki p kopyalama ve yapıştırma p. Yana

Seçenek 1

senin MVC Bunun gibi bir HTML Yardımcısı oluşturmak kullanarak: Master Page Şimdi

namespace [ProjectName].Web.Views 
{ 
    public static class HtmlHelpers   
    { 
      public static MvcHtmlString GetFullPageTitle(this HtmlHelper helper, string PageTitle) 
      { 
       return MvcHtmlString.Create(PageTitle + " - " + WebsiteSettings.WebsiteName) 
      } 
    } 
} 

sadece sayfaları kullanmak içinde Sonra bu

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 

koymak bu

<asp:Content ID="PageTitleContent" ContentPlaceHolderID="TitleConent" runat="server"> 
    <%=Html.GetFullPageTitle("Some PageTitle")%> 
</asp:Content> 

Seçenek 2

Not: Eğer Eylemde Veri doldurmak o zaman hiç sayfanıza ekleyin gerek yok.

böylece gibi: ustan sayfasında Sonra

public ActionResult myAction() 
{ 
    ViewData["Title"] = "MyActionTitle"; 
    return View() 
} 

Eğer başlık söylediklerini geçersiz olabilir size istiyorsa bu konuda şu

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /><%= ViewData["Title"] + "-" + WebsiteSettings.WebsiteName %></asp:ContentPlaceHolder></title> 

güzel bir şey yapmak basitçe olur her sayfa bunu gerçekleştirerek

+0

Bu çözümü beğeniyorum, ancak aradığım üst düzey yaklaşıma uygulayamıyorum. Gerçekçi olarak bu değişikliğin yaklaşık 10 siteye yapılması gerekiyor. Bu nedenle, içerik sayfalarıyla mümkün olduğunca az temas gerektirmesini istiyorum. –

+0

Nathan modifikasyonlarıma bakın, İkinci yöntem kontrolör işlemlerinizi kolayca çalıştırmanızı ve ViewData ["Title"] = "bir şey" ifadesini her View eylemine döndürmenizi sağlar. Bir arama yapabilir ve bu –

+0

için değiştirebilirim İkinci yaklaşımı seviyorum. Güzel. Bugün daha iyi bir şey yapmamak, kabul edeceğim. :) –

0

Bir literal denetimi deneyebilirsiniz, ancak asp.net formunun dışındaki belge başlığında çalışmadığından şüpheleniyorum. Başlığı kod arkasıyla da ayarlamayı deneyebilirsiniz.

1

gerçekten rahatsız (ve neden verilecek boşluk HTML önemli değildir görmüyorum) Böyle Arka planda kodlama şey ayarlamayı deneyebilirsek:

Page.Title = WebsiteSettings.WebsiteName + " " + Page.Title; 
+0

Lütfen benim sorumun son tümceciğine dikkat edin: MVC kullanıyorum, bu yüzden kod geri kabul edilebilir bir seçenek değildir. –

+0

Üzgünüm, o bölümü kaçırdım - Yoksay. –

1

Düzenli ifadeleri kullanarak, dagray dediği gibi, kasalar t ve en kolay yaklaşım.

Bu kod, yalnızca ilk başlık etiketinde yeni satır/karakterlerin ilk geçtiği yeri değiştirir.

void TrimTitleRegex(ref string content) 
{ 
    System.Text.RegularExpressions.Regex rgx = new System.Text.RegularExpressions.Regex(@"\<title\>(.*?)\<\/title\>"); 
    var result = rgx.Replace(content, 
    m => 
    { 
     var codeString = m.Groups[1].Value; 
     // then you have to evaluate this string 
     codeString = System.Text.RegularExpressions.Regex.Replace(codeString, @"\r\n?|\n", ""); 
     codeString = String.Format("<title>{0}</title>", codeString); 
     return codeString.Trim(); 
    }, 1); 

    content = result; 
} 
İlgili konular