ASP.Net MVCのマスターページ上のタイトル
-
19-09-2019 - |
質問
ページの上のページタイトルを管理するために、私は私がのContentPlaceHolderを取っていマスターページを持っています。
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /> </title>
と私が書くすべてのページの
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">Some Title Here
</asp:Content>
今私のクライアントは、すべてのページの上の削除のタイトルのために私に尋ねると、マスターページ上でそれを維持するが、将来的にどのような要件は、その後、我々は彼らの中にデータを挿入することができるかどうかというように、すべてのページのマスターページ上のコンテンツプレースホルダコードを削除しません。 だから、私の問題は、私がこの状況に対処する方法をpage.Soマスターにタイトルを置くことができないのですマスターページとページにそれらを削除せずにいるのですか?
解決
おかげでみんな..私は
ソリューションを得ましたあなたは、マスターページ内からのタイトルの一部を設定したい場合。たとえば、あなたは、すべてのページのタイトルは接尾辞で終了することがあります「 - 個人用サイト」
を。あなたはこれが(気付か - 個人用サイトは上のタック)しようとした場合:
<%@ Master ... %>
<html>
<head runat="server">
<title>
<asp:ContentPlaceHolder ID="titleContent" runat="server" /> - MySite
</title>
</head>
個人用サイトにレンダリングされていません - 、ページを実行して、あなたはそれを見つけることができます。これはHtmlHeadコントロールの癖のように見えます。 HtmlHeadコントロール内のタイトルタグは現在、コントロール自体であるためです。
修正は非常に単純です。そのようなLiteralControlにテキストを追加します。
<%@ Master ... %>
<html>
<head runat="server">
<title>
<asp:ContentPlaceHolder ID="titleContent" runat="server" />
<asp:Literalrunat="server" Text=" - MySite" />
</title>
</head>
他のヒント
あなたは良い解決策は、ページのタイトルをオーバーライドする場合:
System.Web.Mvc.ViewPageから継承し、独自のクラスを作成します。
あなたのビューページは、そのクラスから継承持ってます:
このような何かをして、新しいクラスでは、Page_Loadハンドラを書きます
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Me.Title = "Company Name | " + Page.Title
End Sub
また、タイトルを変更するには、コンテンツプレースホルダを必要としません。 <ヘッド>タグは、すでにラナサーバーコントロールです。ページのロード(またはそれ以前のイベント)でPage.Titleを設定するだけで正常に動作します。
あなたは、あまりにも、このタスクを達成するために、あなたのマスターページ内にrunatサーバーのスクリプトタグを入れることができます。
最も簡単な方法:
あなたのHTMLにどこかに現在のContentPlaceHolder
を移動し、<asp:PlaceHolder runat="server" visible="false"/>
でそれをラップします。あなたが後でそれを必要とすることがあります場合は、もう一度戻ってのContentPlaceHolderを移動します。
各ページに設定されているものを上書きして、タイトルを設定するには、マスターページ上のOnPreRenderイベントを使用します。
なぜない属性を追加可視=マスターページののContentPlaceHolderに偽
私は、これはあなたの状況に対処するための最も簡単な方法だと思います。
ハッピーコーディングます。