重写按钮控件转义内容。怎么阻止它?

时间:2010-04-16 09:15:21

标签: asp.net button

我有一个ASP.Net按钮控件,我已经覆盖它以提供不同的功能。代码如下所示..我正在覆盖Render方法,以<a>包围控件...

    /// <summary>
    /// Render Method
    /// </summary>
    /// <param name="writer"></param>
    protected override void Render(HtmlTextWriter writer)
    {
        base.CssClass = "euva-button-decorated";
        writer.Write("<a class=\"euva-button\">");
        base.Render(writer);
        writer.Write("</a>");
    } 

当我检查页面上生成的源时,我发现ASP.Net已经注入了其click处理程序,它会执行以下操作...

 <a class="euva-button"><input type="submit" name="TestButton" value="Test Button" onclick="clickOnce(this);WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;TestButton&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="TestButton" class="euva-button-decorated" /></a>

...它似乎是为双引号转义输出,这意味着浏览器无法理解javascript。

如何使渲染方法不会转义注入的ASP.Net客户端单击处理程序??

注意我也有自己的客户端点击处理程序,它在页面标记中以声明方式声明。

1 个答案:

答案 0 :(得分:0)

怪异。我做过类似的事情,总是很好。试试这个:

public override void RenderControl(HtmlTextWriter writer)
{
    CssClass = "euva-button-decorated";
    //give the 'a' a class
    writer.AddAttribute(HtmlTextWriterAttribute.Class, "euva-button");
    //open 'a'
    writer.RenderBeginTag(HtmlTextWriterTag.A);
    //render the button
    base.RenderControl(writer);
    //close a
    writer.RenderEndTag();
}