2010-04-16 30 views
1

我有一个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注入它的点击处理程序将执行以下操作...

<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客户端点击处理程序?

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

+0

有你把锚周围的按钮,而不是直接添加类给他们一个特别的理由? – R0MANARMY 2010-04-17 18:52:28

+0

嗨,它的东西,我看到telerik做,似乎使他们皮肤的按钮比增加类按钮。锚点应用部分样式和类按钮的下一部分。看看Telerik在演示网站中使用的“表单装饰器”。 – Remotec 2010-04-20 10:01:14

回答

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(); 
} 
+0

我讽刺地得到一个“未处理的类型'System.StackOverflowException'的异常发生在...”当它试图呈现“A”的开始标记:)....对RenderControl的调用实际上导致重新进入重写的Render方法。我试图改变base.RenderControl base.Render但仍然没有工作。谢谢虽然:) – Remotec 2010-04-16 10:11:43

+0

哦对不起。这应该取代重写的渲染方法。 – BritishDeveloper 2010-04-16 10:27:06

+0

嗨,刚刚尝试过 - 效果相同。很奇怪。 – Remotec 2010-04-16 12:05:49