Подтвердить что ты не робот

Каков статус тегов runat = "server" в ASP.NET MVC?

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

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

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

И, конечно же, на странице Site.Master есть атрибуты сервера runat в ContentPlaceHolders.

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

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

4b9b3361

Ответ 1

Если вы используете тег runat = "server" для элемента ANY, например 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, то зачем нам нужно его запускать?

Оказывается, поскольку я подозревал, что codebehind для head ищет существующее значение внутри тега заголовка (которое было бы выведено здесь <%= 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 тоже.

Ответ 2

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

Ответ 3

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

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

что вам нужно

<head runat="server">

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

Ответ 4

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