Почему теги <% =%> отображаются как "<% =%>"? - PullRequest
6 голосов
/ 10 июля 2009

У меня есть элемент управления на странице, подобной этой:

<input 
    type="button" 
    causesvalidation="false"
    runat="server" 
    id="resetButton"  
    value="Iptal" 
    onclick='return  
    resetForm("<%=projectValidationSummary.ClientID%>");' />

когда оно отображается

<input 
    name="ctl00$ContentPlaceHolder1$EditForm$resetButton" 
    type="button" 
    id="ctl00_ContentPlaceHolder1_EditForm_resetButton" 
    value="Iptal" 
    onclick="return  resetForm(&quot;&lt;%=projectValidationSummary.ClientID%>&quot;);" />

Я использую <%=%> теги на странице, но она отображается как

&quot;&lt;%=%>&quot;

Может кто-нибудь сказать мне, почему это происходит?

Ответы [ 6 ]

4 голосов
/ 10 июля 2009

<% =%> можно использовать только внутри литерального html и нельзя использовать в атрибуте серверных элементов управления.

Вместо этого вы должны использовать привязку данных <% #%>, и в вашем случае я думаю, что вы пытаетесь вызвать функцию javascript на стороне клиента, и тогда ваш код должен выглядеть так:

<asp:button
causesvalidation="false"
runat="server"
id="resetButton"
text="Iptal"
onclientclick='<%# String.Format("return resetForm(\"{0}\");", projectValidationSummary.ClientID) %>' />

и на стороне сервера вы должны связать атрибут с этим кодом (вероятно, в событии Page.Load):

if(!this.IsPostBack)
{
  this.resetButton.DataBind();
}
3 голосов
/ 10 июля 2009

Поскольку вы уже используете runat = "server", вам все равно лучше установить это свойство в коде позади.

resetButton.attributes.add ("onclick", ".....");

3 голосов
/ 10 июля 2009

Удалите runat="server" - вам это не нужно, если вы делаете буквальную запись (<%=)

Итак:

<input 
  type="button" 
  causesvalidation="false"
  id="resetButton"  
  value="Iptal" 
  onclick="return resetForm('<%= projectValidationSummary.ClientID %>');" />

Или используйте вместо этого привязку данных:

<input 
  type="button" 
  causesvalidation="false"
  id="resetButton"  
  runat="server"
  value="Iptal" 
  onclientclick="return resetForm('<%# projectValidationSummary.ClientID %>');" />

//in code behind:
resetButton.DataBind();

.Net не любит литеральные записи внутри серверных элементов управления, кроме панелей.

3 голосов
/ 10 июля 2009

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

onclick='<%= "return resetForm(\"" + projectValidationSummary.ClientID + "\");" %>'
1 голос
/ 10 июля 2009

Поскольку для строки в resetForm выполняется кодировка HTML.

0 голосов
/ 10 июля 2009

Это может быть очевидно, но вы убедились, что тип файла подходит? То есть JSP для JSP или ASP для ASP?

Это должно быть поймано компилятором перед кодированием. Возможно ли предварительная обработка перед компиляцией страницы? Ваш идентификатор изменен, и он добавил элемент имени ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...