2010-05-24 6 views
2

Хорошо, сегодня у нас возникла проблема. Это странная вещь, о которой я даже и не подумал бы попробовать.Встроенный код ASP.NET в серверном элементе управления

<form id="form1" runat="server" method="post" action="Default.aspx?id=<%= ID %>" > 

Хорошо, это очень уродливо, и я бы никогда не пробовал это сам. Он появился в некотором коде, который был написан много лет назад, но работал до этих выходных после того, как на веб-сервере клиента, где размещен код, была установлена ​​куча обновлений.

Фактический результат этого следующий HTML:

<form name="form1" method="post" action="Default.aspx?id=&lt;%= ID %>" id="form1"> 

URL-адрес заканчивается так:

http://localhost:6735/Default.aspx?id=<%= ID %> 

Который, как вы можете видеть, показывает, что символ «<» в настоящее время закодированный до того, как ASP.NET фактически обработает страницу. Мне кажется странным, поскольку я думал, что, хотя это не очень мило, это должно сработать. Я смущен.

Хуже того, клиент настаивает на том, что это ошибка в IE, поскольку он работает в Firefox. Фактически, он также поврежден в Firefox, за исключением того, что Firefox рассматривает его как 0.

Любые идеи о том, почему это происходит и как его легко исправить? Все, что я пытаюсь сделать внутри серверного элемента управления, заканчивается тем, что ускользает.

Редактировать Ok, я нашел «исправить»

<form id="form1" runat="server" method="post" action='<%# String.Format("Default.aspx?id={0}", 5) %>' > 

Но это требует от меня, чтобы позвонить DataBind, который добавляет больше хака к первоначальному хака. Угадайте, если никто не подумает о чем-нибудь еще, мне придется пойти с этим.

+0

Ничего себе! Вы уверены, что нет другого способа исправить это? Вы делаете какой-то перекрестный пост? Редко можно увидеть, что «действие» указано для приложения webform. –

+0

Это фактически сообщение обратно к себе. Очень странно! Это все веб-формы с встроенным кодом «позади». Я согласен, я никогда не использовал атрибут action в веб-формах. Никогда не было необходимости. – John

ответ

0

ваша форма нуждается в runat=server

+0

Как отмечено в примере выше, у него действительно есть runat = "server" – John

1

ASP.NET 3.5 добавлены свойства "Действие" для управления HtmlForm. Ваш предыдущий код работал просто отлично, потому что «действие» было всего лишь строкой, а самородок кода выдавал дополнительные данные для вас. Теперь, когда есть свойство Action, вы не можете использовать простой код emit nugget, так как серверный элемент управления ожидает, что свойство имеет буквальное строковое значение (такое же, как и любое другое свойство управления на стороне сервера).

Ваше обходное решение с использованием синтаксиса biding верно. Чтобы заставить его работать так, как раньше, вам нужно будет удалить тег runat = server в своей форме, который затем не позволит парсеру ASPX рассматривать его как элемент управления HtmlForm и вместо этого рассматривать его как литерал (где ваш код испускает самородок будет разрешен к работе).

Ваш другой вариант, который может быть намного чище - это просто установить свойство действия формы с помощью кода-кода в page_load. Причина, по которой свойство action задано так, как это было, объясняется тем, что в ранних версиях .NET Framework не было поддержки для установки свойства Action.

+0

, используя 'form1.Action = string.Format (" default.aspx?id = {0} ", _id)' в вашем коде намного чище. Вы упомянули встроенный в свой заголовок вопроса, так что, возможно, у вас есть повод держать его в строчном порядке. – MikeM

Смежные вопросы