为什么<%=%>标签呈现为“<%=%>”?

时间:2009-07-10 12:24:04

标签: asp.net

我在这样的页面上有一个输入控件:

<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 个答案:

答案 0 :(得分:4)

&lt;%=%&gt;只能在文字html中使用,不能在服务器控件属性中使用。

相反,您应该使用数据绑定&lt;%#%&gt;,在您的情况下,我认为您尝试在客户端触发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();
}

答案 1 :(得分:3)

您不能将渲染块与值的文本混合和匹配。试试这个

onclick='<%= "return resetForm(\"" + projectValidationSummary.ClientID + "\");" %>'

答案 2 :(得分:3)

删除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 :(得分:3)

由于你已经在使用runat =“server”,所以最好还是在代码隐藏中设置这个属性。

resetButton.attributes.add(“onclick”,“.....”);

答案 4 :(得分:1)

因为在resetForm中发生了字符串的HTML编码。

答案 5 :(得分:0)

这可能很明显,但您是否确保文件类型合适?即用于JSP的ASP或用于ASP的asp?

这应该在编码之前被编译器捕获。在编译页面之前是否可能存在预处理?您的ID已更改,并添加了名称元素...