Nếu bạn sử dụng thẻ runat = "server" trên bất kỳ phần tử nào, chẳng hạn như DIV, nó sẽ hiển thị mã đó dưới dạng phương thức riêng biệt trong trang được biên dịch.
Nếu bạn đang chuyển đổi mã 'kế thừa', bạn nên xóa tất cả các thẻ runat ngay trước mặt nếu không bạn sẽ gặp phải tình huống mã như sau cho bạn lỗi.
<% foreach (var cat in cats) { %>
<div runat="server">
<span class="name"> <%= cat.name %> </span> is a
<span class="breed"> <%= cat.breed %> </span>
</div>
<% } %>
Mã này sẽ không cho bạn biết một chút điên rồ về 'cat'
nằm ngoài phạm vi. Cuối cùng, khi bạn nhìn vào mã được tạo đầy đủ, bạn sẽ thấy rằng <div>
đã được tạo ra như là phương pháp riêng của nó - tất nhiên là phạm vi khác nhau không có con mèo trong tầm nhìn.
Trở lại trong giây lát để template mặc định cho một ứng dụng MVC:
Bạn sẽ thấy các mẫu hiện tại mang đến cho bạn này cho head
:
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><%= Html.Encode(ViewData["Title"]) %></title>
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>
này để lại cho tôi tự hỏi - nếu chúng ta đang sử dụng <% = cú pháp để viết tiêu đề trực tiếp vào thẻ title
- vậy tại sao chúng ta cần phải làm cho nó runat?
Hóa ra là tôi nghi ngờ rằng codebehind cho head
tìm một giá trị hiện có bên trong thẻ tiêu đề (có thể đã được xuất tại đây <%= Html.Encode(ViewData["Title"]) %>
. Nếu nó tìm thấy (sẽ là trường hợp cho tất cả các lượt xem mẫu trong Nếu không có tiêu đề nào tồn tại (nếu ViewData ["Title"] là null hoặc rỗng), nó sẽ mặc định cho bất cứ điều gì được xác định trong khung nhìn của bạn theo thuộc tính Title
:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/RRMaster.Master"
Title="View Products" AutoEventWireup="true" CodeBehind="ViewProduct.aspx.cs"
Inherits="RR_MVC.Views.Products.ViewProduct" %>
Trong trang cái của tôi, tôi đã xóa thẻ runat='server'
- vì tôi không nghĩ rằng mình sẽ muốn đặt tiêu đề trang của mình từ chế độ xem Title
tài sản. Nhưng tôi đang cố gắng thực hiện bài đăng blog hứa hẹn này của Phil về chủ đề - trong trường hợp máy chủ runat cung cấp cho tôi bất kỳ điều gì hữu ích cho CSS và JS của tôi nữa.
Nguồn
2009-01-24 11:06:53
Hmm, vậy tại sao khi tôi tạo Trang chủ Chế độ xem MVC mặc định, nó có ba máy chủ lưu trữ không? Dường như nếu đây không phải là các cấu trúc MVC điển hình thì ít nhất các giá trị mặc định của mã sẽ không có chúng. –
Nó vẫn đang sử dụng công cụ hiển thị ASP và ContentPlaceHolders là cách bạn tạo các trang cái trong ASP.NET. Lưu ý rằng điều quan trọng là "nếu bạn thấy mình làm việc với nó trong code-behind" - các trình giữ chỗ trong MVC không được giải quyết trong đoạn mã phía sau. – tvanfosson