Условный атрибут Html.TextBox с ASP.NET MVC Preview 5

Шаблоны должны использоваться в заголовках, потому что компилятор должен создавать экземпляры разных версий кода в зависимости от параметров, заданных / выведенных для параметров шаблона. Помните, что шаблон не представляет собой код напрямую, а шаблон для нескольких версий этого кода. Когда вы компилируете функцию non-template в файле .cpp, вы компилируете конкретную функцию / класс. Это не относится к шаблонам, которые могут быть созданы с использованием разных типов, а именно, если при замене параметров шаблона конкретными типами необходимо исправить конкретный код.

Была функция с ключевым словом export, которая была предназначенный для отдельной компиляции. Функция export устарела в C++11 и, AFAIK, только один компилятор реализовал ее. Вы не должны использовать export. Отдельная компиляция невозможна в C++ или C++11, но, возможно, в C++17, если понятия в нее входят, мы могли бы иметь некоторый способ отдельной компиляции.

Для отдельной компиляции, которая должна быть достигнута, разделить проверка шаблона тела должна быть возможна. Кажется, что решение возможно с концепциями. Взгляните на этот документ , недавно представленный на совещании по стандартам. Я думаю, что это не единственное требование, поскольку вам все равно необходимо создать код кода шаблона в коде пользователя.

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

30
задан SteveC 22 February 2012 в 14:16
поделиться

4 ответа

Жесткая проблема... Однако, если Вы хотите определить только эти readonly атрибут, можно сделать это как это:

<%= Html.TextBox("Client.ClientId", ViewData.Model.ClientId, 
  ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0 
    ? new { @readonly =  "readonly" } 
    : null) 
%>

, Если Вы хотите определить больше атрибутов тогда, необходимо определить два анонимных типа и иметь несколько копий атрибутов. Например, что-то вроде этого (который я не люблю так или иначе):

ClientId.Length > 0 
  ? (object)new { @readonly = "readonly", @class = "myCSS" } 
  : (object)new { @class = "myCSS" }
38
ответ дан Panos 22 February 2012 в 14:16
поделиться
  • 1
    @Neil " реализация является бесплатной игнорировать любое требование этого Международного стандарта, пока результат состоит в том, как будто требование было obeyed" – Terry Mahaffey 19 January 2010 в 04:19

Я думаю, что это должно быть

<%= ((bool) Eval("InRole")) ? "checked" : "" %> 

вместо этого в ответе leppies.

<%# ((bool) Eval("InRole")) ? "checked" : "" %> 

, По крайней мере, это не работало на меня с #, но это работало с =. Я делал что-то не так? Спасибо за совет так или иначе :)

1
ответ дан Olaj 22 February 2012 в 14:16
поделиться
  • 1
    @Martin, компилятор имеет такие ограничения. Конвейер процессора не делает. Но если you' ре с помощью конструктора/деструктора для вызова API блокировки можно зависеть от тех API для наличия правильных барьеров. – Eclipse 19 January 2010 в 03:31

И альтернатива должна только испустить его как простой HTML. Да, редактор заставит Вас думать, что Вы неправы, но это, кажется, происходит вполне часто с VS2008SP1. Этот пример специально для флажков, который, кажется, полностью потрачен впустую в CTP5, но он дает Вам общее представление, как испустить условные атрибуты.

<input type="checkbox" name="roles" value='<%# Eval("Name") %>' 
  <%# ((bool) Eval("InRole")) ? "checked" : "" %> 
  <%# ViewData.Model.IsInRole("Admin") ? "" : "disabled" %> />
4
ответ дан leppie 22 February 2012 в 14:16
поделиться
  • 1
    +1, деструкторы C++ детерминированы, который является, почему у Вас есть эта гарантия. – user7116 19 January 2010 в 02:47
$ (function () { $ ("[readonly = 'false']"). removeAttr ("только для чтения"); });
0
ответ дан 27 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

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