如何防止Telerik RadChart生成onerror属性?

时间:2010-04-15 13:18:44

标签: c# asp.net-mvc telerik

我们在ASP.Net MVC项目中使用Telerik Rad Controls for ASP.Net Ajax。 RadChart生成以下HTML:

<img onerror="if(confirm('Error loading RadChart image.\nYou may also wish to check the ASP.NET Trace for further details.\nDisplay stack trace?'))window.location.href=this.src;" src="ChartImage.axd?UseSession=true&amp;ChartID=e25ad666-e05b-4a92-ac0c-4f2c729b9382_chart_ctl00$MainContent$AverageCTMChart&amp;imageFormat=Png&amp;random=0.501658702968461" usemap="#imctl00_MainContent_AverageCTMChart" style="border-width: 0px;" alt="">

我想删除onerror属性;如果出现问题,我真的不希望为客户提供查看堆栈跟踪的选项。我看不到任何方法来控制此控件生成的标记。 Google搜索没有提供帮助。有没有人以前处理过这个问题?

如何删除onerror属性?

3 个答案:

答案 0 :(得分:1)

仅在调试配置中显示onerror。在Release中部署应用程序后,属性不会呈现!

答案 1 :(得分:0)

您可以执行以下操作,只需将其添加到页面底部或在某处的load事件中调用removeOnError。

function removeOnError(){
    //Grab all images
    var imgs = document.getElementsByTagName('img');
    for(var i=0;i<imgs.length;i++){
        //If they've got the onerror attribute
        if(imgs[i].onerror){
            //set it to null
            imgs[i].onerror = null;
        }
    }
}
//Call the function above
removeOnError();

修改

查看Telerik的网站,它似乎不是一个选项,所以我能想到的唯一方法是覆盖页面的Render事件并手动将其删除:

protected override void Render(HtmlTextWriter writer)
{
    using (System.IO.MemoryStream MS = new System.IO.MemoryStream())
    {
        using (System.IO.StreamWriter SW = new System.IO.StreamWriter(MS))
        {
            HtmlTextWriter NW = new HtmlTextWriter(SW);
            base.Render(NW);
            NW.Flush();
            MS.Position = 0;
            using (System.IO.StreamReader SR = new System.IO.StreamReader(MS))
            {
                string html = SR.ReadToEnd();
                MatchCollection MC = Regex.Matches(html, "<img.*?(?<OnError>onerror=\".*?\").*?>");
                foreach (Match M in MC)
                {
                    if (M.Success)
                    {
                        html = html.Replace(M.Groups["OnError"].Value, "");
                    }
                }
                Response.Write(html);
                SR.Close();
            }
        }
    }
} 

答案 2 :(得分:0)

Telerik控制检查属性

HttpContext.Current.IsDebuggingEnabled

决定是否生成onError属性。因此,要删除这些块,请确保在web.config

中的“编译”节点中关闭调试
<compilation debug="false">