Встроенный скрипт не разрешается в настраиваемом элементе управления ASP.Net - PullRequest
2 голосов
/ 22 октября 2008

В настоящее время я работаю с пользовательским средством проверки регулярных выражений (к сожалению) .

Я пытаюсь установить шаблон Regex, используя встроенный скрипт на стороне сервера, как это:

ValidationExpression="<%= RegExStrings.SomePattern %>"

Однако скрипт не разрешает код на стороне сервера. Вместо этого это интерпретируется буквально, и я получаю что-то вроде этого в визуализированной разметке:

ctl00_DefaultContent_regexValidatorInvitation.validationexpression = "<%= RegExStrings.SomePattern %>";

Какие-либо подсказки относительно того, почему это не решается должным образом?

Ответы [ 8 ]

2 голосов
/ 19 февраля 2009

Это теперь прояснилось в моем MS. Проблема, которую я обнаружил, была вызвана тем фактом, что атрибут «действие» в серверных формах не действовал до .NET 2 SP2, но теперь его можно установить. Блоки рендеринга кода никогда не работали в значениях атрибутов - это объясняется ближе к концу этого поста.

Это было следствием преднамеренного изменения поведения, представленного в Microsoft .NET Framework 3.5 SP1. До пакета обновления атрибуты действия и метода в серверных тегах FORM не могли быть переопределены. Если указано, они будут заменены ASP.NET на «POST» и «имя страницы».

Ранее синтаксический анализатор страниц ASP.NET не препятствовал определению этих атрибутов, хотя в документации рекомендовано использовать его для атрибута действия: http://msdn.microsoft.com/en-us/library/k33801s3.aspx

В частности, комментарий (в контексте элемента FORM):

• «Открывающий тег не должен содержать атрибут действия. ASP.NET динамически устанавливает эти атрибуты при обработке страницы, переопределяя любые настройки, которые вы можете выполнить.»

Проблема, о которой первоначально сообщал Джош, когда блок кода не интерпретировался, не является новым поведением, но является известной ошибкой - блоки отображения кода нельзя использовать в атрибутах управления сервером. Это сообщается как ошибка «Connect»: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=109257 который содержит следующее: «Атрибуты серверных элементов управления не могут принимать встроенное выражение в качестве значения. Это объясняет непредвиденное поведение, как показано с помощью:« ...» Однако встроенный код можно использовать для значений атрибутов. «

2 голосов
/ 28 января 2009

Но почему это? Я могу воспроизвести вашу проблему, используя простую страницу aspx, как показано ниже:

<%@ Page language="c#" AutoEventWireup="true" %>
<html>
  <body >
    <form id="Form1" method="post" runat="server" action="?<%=Request.QueryString%>">
                Query String value: <%=Request.QueryString %>
                <br />
                <input type=submit />
     </form>
  </body>
</html>

После отправки формы отображается следующее:

Значение строки запроса: % 3c% 25 = Request.QueryString% 25% 3e

По какой-то причине встроенный код не выполняется, когда runat = "сервер" присутствует. Странная вещь у меня 3 машины которые не ведут себя таким образом, а тот, который делает, поэтому я могу только предположить, что это проблема конфигурации IIS / .NET, возможно, вызванная недавним MS Обновить. Программное обеспечение, которое я недавно установил на машину демонстрирует это поведение: Visual Studio 2008 WSE 3.0 IE8 RC1

Интересно, кто-нибудь из них вызвал это?

1 голос
/ 29 января 2009

Я удалил .NET Framework во время исследования этого (3.5, затем 3.0 и 2.0) - у меня тогда не было проблем после Установка каждого из следующих: .net Framework 2.0 .net Framework 2.0 SP1 .net Framework 3.0 .net Framework 3.0 SP1 .net framework 3.5

Но после того, как я установил .net framework 3.5 SP1, поведение вернулось - думаю, это проблема. Я поднял это с Microsoft и обновлю эту ветку, когда получу ответ.

1 голос
/ 28 января 2009

devstuff, это не объясняет, почему это работает на 3 из моих машин, а не на 4-й, не так ли? Все они используют одну и ту же версию .NET Framework и настройки IIS (я полагаю, проверив столько же, сколько и я),

0 голосов
/ 28 января 2009

Вы используете выражение привязки данных для элемента управления, который не привязан к данным. Вам нужно вызвать DataBind () или использовать реализацию ExpressionBuilder. Простой ExpressionBuilder для привязки к произвольному коду можно найти по адресу http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx

0 голосов
/ 22 октября 2008

Если ваш валидатор регулярных выражений имеет атрибут runat = "server", то измените его из кода ниже. Это было бы намного проще.

0 голосов
/ 22 октября 2008

Это воспринимается как буквальная строка, попробуйте

ValidationExpression = '<% = RegExStrings.SomePattern%>'

Редактировать: Выше не работает, я пытался увидеть, как это сделать без успеха, я обычно устанавливаю свойства в коде и использую этот синтаксис для привязки данных только тогда, когда это необходимо Мне было бы интересно узнать, можно ли это сделать тоже.

0 голосов
/ 22 октября 2008

Значения в веб-элементе управления не отображают код на стороне сервера. Скорее установите это из кода позади

RegExValidator1.ValidationExpression = RegExStrings.SomePattern;
...