Новый атрибут asp "showat" требуется непоследовательно в VS2010. Зачем? - PullRequest
4 голосов
/ 01 апреля 2010

Когда я генерирую код с использованием шаблонов T4 в Visual Studio 2010, я получаю следующую ошибку для каждого из моих элементов управления asp при попытке компиляции:

В элементе управления "ddState" отсутствует обязательный атрибут "showat".

Я никогда не получал эту ошибку в предыдущих версиях .NET. Кроме того, я не не получаю эту ошибку, когда вручную создаю свои страницы путем перетаскивания, либо не получаю ее, когда сам набираю контрольный текст. Когда я генерирую код, я должен вручную добавить showat="client" в свой тег, чтобы компилятор был счастлив. Насколько я понимаю, мне никогда не приходилось явно указывать этот тег. Следующее:

<asp:dropdownlist id="ddState" runat="server" showat="client" />

решает проблему. Почему я должен добавить это в сгенерированный код, а не в другое время?

(Это проект веб-форм VS-2010, использующий VB на случай, если что-то изменится.)

Ответы [ 5 ]

3 голосов
/ 01 апреля 2010

Очевидно, что .NET 5 или другой из этих суперсервисов разрешат нечто, называемое целевым рендерингом . Изначально он был предназначен для использования только в контексте веб-форм, но недавно я слышал, что будет какой-то причудливый способ использовать его в MVC (с использованием некоторых вспомогательных классов) и в сервисах, использующих WCF. Он будет хорошо работать с динамическими данными, но очень слабо связан с ним; Вы можете использовать один или другой полностью независимо. Если вы конфигурируете свои динамические данные с определенными тегами, вы можете создать их на клиенте и т. Д.

Для сейчас , просто вставьте showat="client" во все свои теги, и все хорошо. Предполагается, что это неявное значение по умолчанию, но я слышал о случаях, когда в IDE это требуется. В будущем , showat="client" будет в любом случае самым безопасным параметром, обеспечивающим ожидаемое поведение в 99,9% случаев.

2 голосов
/ 01 апреля 2010

"showat = 'client'" в настоящее время должно мало влиять на ваше кодирование. Его основная цель - будущая ориентация на выходные WCF, которую они захотят иметь обратно совместимой. На данный момент единственное возможное значение - это «клиент», но в будущем появятся другие возможные значения, которые позволят сделать предварительный рендеринг кэшированных значений и, по-видимому, «подтолкнуть» вывод к сервисам. Пример, который я видел в последнем кодовом лагере, был, где вы могли нажать на службу на (возможно) том же сайте, а также на клиентском компьютере, для целей регистрации / отладки. У вас было бы что-то вроде (для использования вашего примера):

<asp:dropdownlist id="ddlCP" runat="server" showat="client, logService" />

. , , и тогда рендеринг будет идти в ваш файл журнала. Или вашему поставщику сеансов (если у вас есть несколько веб-серверов и вы используете поставщика общих сеансов) и т. Д. Я думаю, что logService выше должно быть определено в файле web.config или как-то еще.

2 голосов
/ 01 апреля 2010

Это требуется в VB, но не в C #, поэтому иногда кажется, что в этом нет необходимости. Точнее говоря, компилятор C # автоматически помещает эквивалент showat=client в IL, если вы не укажете showat target , отличный от client.

1 голос
/ 01 апреля 2010

Договорились, что мой VS2010 решит эту проблему для вас.Затем вы можете полностью удалить метки.Я бы предложил получить обновление.Это хорошо работает за 599 долларов.В противном случае добавьте showat = "client" во все теги.Я думаю, что Rising Star понял это правильно, хотя я еще не проверял это.

1 голос
/ 01 апреля 2010

Проверьте, выполняет ли VB что-либо на странице дизайнера веб-формы, когда вы используете IDE для добавления элемента управления. Я не уверен, как VB вставляет неявный тег. Но это будет что-то, что пропустит шаблон T4, просто мысль ...

...