【问题标题】:Why do <%=%> tags render as &quot;&lt;%=%>&quot;?为什么 <%=%> 标签呈现为“<%=%>”?
【发布时间】:2009-07-10 12:24:04
【问题描述】:

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

<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;);" />

我在页面上使用&lt;%=%&gt; 标签,但它呈现为

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

谁能告诉我为什么会这样?

【问题讨论】:

  • 您的输入是 还是 控件?
  • 我认为问题可能有不同的答案,具体取决于您要执行的操作。这是 JavaScript、JSP 还是 ASP?
  • 它是asp.net页面和

标签: asp.net


【解决方案1】:

只能在文本 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();
}

【讨论】:

  • 感谢我们的帮助,我制作了 js 函数“resetForm”非参数,在这种情况下,我在 javascript 函数中获得了项目的 clientId...
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    由于您已经在使用 runat="server",因此最好还是在代码隐藏中设置此属性。

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

    【讨论】:

      【解决方案4】:

      删除 runat="server" - 如果您正在执行文字写入,则不需要它 (&lt;%=)

      所以:

      <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 不喜欢在面板以外的服务器渲染控件中进行文字写入。

      【讨论】:

      • 在第二个代码区域中,onlick 是一个服务器事件,'return resetForm...' 用于无效分配。
      • 好发现 - 我已将其更改为 onclientclick
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        这应该在编码之前被编译器捕获。是否可以在编译页面之前进行预处理?您的 id 已更改,并添加了 name 元素...

        【讨论】:

          猜你喜欢
          • 2017-08-03
          • 2016-08-20
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 2018-06-04
          • 2013-10-06
          • 2010-10-23
          相关资源
          最近更新 更多