Каково состояние runat = теги “сервера” в ASP.NET MVC?

Вам нужно использовать отражение, чтобы начать использовать метод, а затем «построить» его, предоставив аргументы типа MakeGenericMethod :

MethodInfo method = typeof(Sample).GetMethod("GenericMethod");
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);

. Для статического метода, pass null в качестве первого аргумента Invoke. Это не имеет никакого отношения к универсальным методам - ​​это просто нормальное отражение.

Как уже отмечалось, многое из этого проще с C # 4 с использованием dynamic - если вы можете использовать вывод типа, конечно. Это не помогает в случаях, когда вывод типа недоступен, например, точный пример в вопросе.

18
задан Fabian Steeg 25 January 2009 в 00:22
поделиться

3 ответа

При использовании runat =, "сервер" наклеивает ЛЮБОЙ элемент, такой как 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 тег - затем, почему мы должны были бы сделать это runat?

Это складывается, поскольку я подозревал, что codebehind для head ищет существующее значение в теге заголовка (который был бы произведен здесь <%= Html.Encode(ViewData["Title"]) %>. Если это найдет один (который будет иметь место для всех демонстрационных представлений в шаблоне MVC), затем, то это ничего не сделает далее. Если никакой заголовок не будет существовать (если ViewData ["Заголовок"] будет пустым или пустым), то он примет значение по умолчанию к тому, что определяется в Вашем представлении эти 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 свойство. Но я удерживаю выполнение обещанного сообщения в блоге этого незаконченного Phil на предмете - в случае, если runat сервер дает мне что-либо полезное для моего CSS и JS также.

7
ответ дан 30 November 2019 в 09:30
поделиться

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

2
ответ дан 30 November 2019 в 09:30
поделиться

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

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

, что Вам нужно

<head runat="server">

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

1
ответ дан 30 November 2019 в 09:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: