2008-11-28 43 views
16

Cách ưa thích của việc đặt tiêu đề html (ở đầu) cho chế độ xem khi sử dụng trang chính là gì?ASP.NET MVC - Xem với trang chính, cách đặt tiêu đề?

Một cách là sử dụng Page.Title trong tệp .aspx, nhưng điều đó yêu cầu trong trang chính có thể gây rối với mã HTML. Vì vậy, cho phép giả sử không có điều khiển phía máy chủ, chỉ html tinh khiết. Bất kỳ ý tưởng tốt hơn?

CẬP NHẬT: Tôi muốn đặt tiêu đề ở chế độ xem KHÔNG trong bộ điều khiển hoặc kiểu máy.

Trả lời

-3

Chúng tôi đã kết thúc với

<head runat=server visible=false> 

trong trang chủ.

Bằng cách này chúng ta có thể đọc từ Page.Title (Page.Title yêu cầu phần tử đầu tồn tại, nếu không nó sẽ ném một ngoại lệ, hãy kiểm tra bằng phản xạ). Sau đó chúng tôi sử dụng yếu tố đầu của riêng mình - cách MVC.

+0

Điều đó không thực sự MVC – UpTheCreek

-1

Có thuộc tính Tiêu đề của chỉ thị @Page cho các trang nội dung.

+1

Có, nhưng tôi sai d ở trên, nó yêu cầu trong trang chính, đó không phải là những gì tôi muốn. – bh213

+1

Câu hỏi của bạn là vô nghĩa sau đó, bởi vì bạn đang nói rằng bạn muốn đặt tiêu đề của trang nội dung của bạn bằng cách sử dụng các cấu trúc phía máy chủ, nhưng bạn không muốn sử dụng các cấu trúc phía máy chủ. – sliderhouserules

+0

Vâng, tôi muốn tránh bất kỳ điều khiển aspx nào. ăn một số html chúng tôi sử dụng, mà chúng tôi có thể giải quyết, nhưng tôi thích sử dụng html thuần túy hơn. Mặc dù vậy, trang chính và điều khiển phải được chấp nhận. – bh213

2

Khi tôi tạo một dự án MVC mới, nó có các tệp trong đó và sử dụng trang chính. Nhìn vào nó có vẻ như nó vượt qua tiêu đề để ViewData như ViewData ["Title"] và trong trang chủ, trong <head> có một khối script mà kết quả đầu ra ViewData ["Title"].

11

Tôi thấy nhiều người sử dụng tùy chọn <%= ViewData["Title"] %>.

Tôi giả sử bạn cũng có thể chèn ContentPlaceHolder tên sách và sau đó chỉ sử dụng tên đó trên trang của bạn, nhưng trong tất cả các ví dụ MVC tôi đã thấy, họ sử dụng tùy chọn đầu tiên.

-7

Bạn luôn có thể sử dụng javascript trong trang điểm của bạn:

<script type="text/javascript> 
    document.title = "Hello World"; 
</script> 
+0

Đừng làm điều này vì JavaScript chưa bao giờ được đưa ra 100%. –

+0

Bạn sẽ lãng phí một số cơ hội SEO quá – UpTheCreek

-1

Đối với các trang nội dung ASP.NET, chỉ cần thêm Title="" vào trình giữ chỗ <%@ %>.

+0

Đây là những gì tôi đã nói ở trên. – sliderhouserules

1

Tôi đã kết thúc bằng cách sử dụng tệp mã phía sau để triển khai Page.Title="..." theo phương thức Page_Load().

Tôi không thích làm điều này, tuy nhiên các nỗ lực thực hiện thay đổi trực tiếp trên trang .aspx không hoạt động, vì kết quả là có hai thẻ <title> hiện diện, thẻ tôi đã tạo và thẻ được tạo bởi Master tệp trang được kế thừa từ. Lý tưởng nhất, mã trang của tôi nên đã ghi đè giá trị <title> của tệp chính, nhưng tôi đoán đây chỉ là một trong những lý do mà ASP.Net MVC vẫn có, và có thể đã được sửa trong phiên bản ASP mới hơn. .Net MVC Framework (chúng tôi vẫn còn trên ASP.Net MVC Beta)

+0

Điều này đã thay đổi trong RC. –

32

Trong các trang chính của chúng tôi, chúng tôi đã tạo cả một "init" ContentPlaceHolder và một tiêu đề "ContentPlaceHolder. Nếu ai đó muốn đặt Program.Title, họ có thể đặt nó trong CSharp trong trình giữ chỗ init hoặc họ có thể ghi đè trình giữ chỗ "tiêu đề" bằng cách sử dụng thẻ.

Master Page

<asp:ContentPlaceHolder id="init" runat="server"></asp:ContentPlaceHolder> 
<head runat="server">  
    <asp:ContentPlaceHolder ID="title" runat="server"> 
     <title><%=this.Page.Title%></title> 
    </asp:ContentPlaceHolder> 
</head> 

Xem trang hoặc có thể ghi đè lên toàn bộ "title" giữ chỗ nội dung:

<asp:Content ID="Content1" ContentPlaceHolderID="title" runat="server"> 
     <title>Home Page</title> 
</asp:Content> 

hoặc programatically đặt tiêu đề trang.

<asp:Content ID="Content1" ContentPlaceHolderID="init" runat="server"> 
    <%this.Title = "Home Page";%> 
</asp:Content> 

Hãy chắc chắn rằng bạn loại bỏ các Title = "" từ trang chỉ thị ở phía trên, hoặc bạn sẽ không thể thay đổi programatically Page.Title.

+0

Bạn chỉ cần runat = "server" trong thẻ head nếu bạn có ý định điền tiêu đề từ chỉ thị Tiêu đề = "" ở đầu chế độ xem của bạn. Nếu không thì tốt hơn là bỏ nó ra. – UpTheCreek

+0

Điều này thật hoàn hảo - tôi cần một cách để hỗ trợ điều này trong các chế độ xem dựa trên Biểu mẫu web cũ. Tất nhiên nó đã được hỗ trợ thông qua Razor với cú pháp ViewBag.propertyName có thể dẫn tất cả các khung nhìn Razor trước khi tuyên bố trang bố trí của chúng. Cảm ơn một lần nữa! – Rob

0

Tôi có lớp chế độ xem cơ sở đặt tiêu đề trang từ tệp tài nguyên. Hoạt động khá tốt cho tôi.

1

Bạn có thể làm điều này trong Master Page của bạn:

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

nơi MyTitle = một số giá trị từ web.config của bạn hoặc văn bản cứng như "My Web"

Bây giờ trong các trang view (Index cho ví dụ):

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
<%:"My Home Page"%> 

Bây giờ khi bạn duyệt trang chủ của bạn, ti tle sẽ là "My Web :: My Home Page".

+1

Xin chào, tôi thích cách tiếp cận này! Nó hoạt động! Và tôi thực hiện một số sửa đổi trên nó để đặt dấu phân tách "::" từ trang chính sang (các) trang xem, do đó chúng tôi có thể tránh hiển thị dấu "::" trống trên trang chủ. – Jony

+0

Cảm ơn bạn @Jony –

0

Tôi tạo ra một lớp được gọi là ứng dụng với một tài sản Tiêu đề (sử dụng get/set):

public static class Application 
{ 
    static string title; 

    public static string Title 
    { 
     get { return title; } 
     set { title = value; } 
    } 
} 

sau đó tôi thiết lập thuộc tính trên kiện Page_Load cho mỗi trang:

Application.Title = "Silly Application"; 

sau đó tôi chỉ tham chiếu thuộc tính đó trên trang chính:

<div id="divApplicationTitle"> 
    <asp:HyperLink runat="server" NavigateUrl="~/Default.aspx"><asp:Image ID="imgApplicationImage" runat="server" SkinID="skinApplicationLogo" /><%=Application.Title%></asp:HyperLink> 
</div> 
Các vấn đề liên quan