Вопрос

В некоторых текстах на ASP.NET В MVC утверждается, что "нет тегов сервера runat", даже в этой статье MSDN говорится об этом, хотя прямо над этим утверждением есть пример кода с тегом сервера runat в элементе HEAD:

И в разговорах StackOverflow я прочитал

"Тот факт, что вы хотите использовать элементы управления "runat= server", означает, что вы должны использовать традиционное ASP.NET приложение.

И, конечно, на сайте.Главная страница содержит атрибуты сервера runat в ContentPlaceHolders.

Единственное, что я вижу отсутствующим в ASP.NET MVC с точки зрения runat server, - это повсеместный тег runat ="server" на каждой странице / представлении .aspx.

Но как насчет остальных тегов сервера runat в ASP.NET MVC, что люди имеют в виду, когда говорят, что ASP.NET В MVC их нет?

Это было полезно?

Решение

Если вы используете тег runat="server" для ЛЮБОГО элемента, такого как DIV, он будет отображать этот код как отдельный способ на скомпилированной странице.

Если вы конвертируете "устаревший" код, рекомендуется удалить все теги runat сразу, иначе вы окажетесь в ситуации, когда код, подобный следующему, выдает ошибку.

<% foreach (var cat in cats) { %>
    <div runat="server">
         <span class="name"> <%= cat.name %> </span> is a
         <span class="breed"> <%= cat.breed %> </span>
    </div>
 <% } %>

Этот код потерпит неудачу, сообщая вам о каком-то сумасшествии по поводу 'cat' быть вне поля зрения.В конце концов, когда вы посмотрите на полный сгенерированный код, вы увидите, что <div> был сгенерирован как совершенно свой собственный метод - который, конечно, представляет собой другую область применения без каких-либо кошек в поле зрения.

Вернемся на секунду к шаблону по умолчанию для приложения MVC:

Вы увидите, что текущий шаблон предоставляет вам это для 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>

Это заставило меня задуматься - используем ли мы <%= синтаксис для записи заголовка непосредственно в title tag - тогда зачем нам нужно было бы делать его runat?

Оказывается, как я и подозревал, что кодовая ссылка для head ищет существующее значение внутри тега title (которое было бы выведено здесь с помощью <%= Html.Encode(ViewData["Title"]) %>.Если он найдет один (что будет иметь место для всех примеров представлений в шаблоне MVC), то он больше ничего не будет делать.Если заголовок не существует (если ViewData ["Title"] имеет значение null или пусто), по умолчанию будет использоваться все, что определено в вашем представлении с помощью Title атрибут :

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/RRMaster.Master" 
Title="View Products" AutoEventWireup="true" CodeBehind="ViewProduct.aspx.cs"
Inherits="RR_MVC.Views.Products.ViewProduct" %>

На моей главной странице я бы удалил runat='server' тег - поскольку я не думаю, что когда-нибудь захочу заполнять заголовок своей страницы из Title собственность.Но я воздерживаюсь от этого в ожидании обещанного сообщения Фила в блоге на эту тему - на случай, если сервер runat предоставит мне что-нибудь полезное и для моего CSS, и для JS.

Другие советы

Они не означают, что вы не можете использовать runat="server", а скорее то, что в MVC, как правило, нет необходимости использовать элементы управления на стороне сервера.Если вы обнаружите, что вам нужен элемент управления на стороне сервера и вы работаете с ним в коде -за этим стоит и указание на то, что приложение возвращается к webforms.Все, что обычно происходит в вашем коде, теперь должно обрабатываться в вашем контроллере или в самой логике представления.

Просто прочтите в этом руководстве:

http://www.asp.net/learn/mvc/tutorial-12-cs.aspx

что вам нужен

<head runat="server">

чтобы иметь возможность легко определять заголовок страницы в ваших представлениях.

MVC - это просто слой поверх webforms.Мои пользовательские элементы управления webforms также требуют, чтобы тег head был доступен на стороне сервера для регистрации скрипта.Эти пользовательские элементы управления отображаются на стороне клиента и не используют viewstate или события на стороне сервера.Из-за этого они также могут быть использованы в MVC с механизмом просмотра ASPX.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top