Как я могу предотвратить создание Telerik RadChart атрибута onerror? - PullRequest
1 голос
/ 15 апреля 2010

Мы используем Telerik Rad Controls для ASP.Net Ajax в проекте ASP.Net MVC. 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 ]

1 голос
/ 25 июня 2010

Onerror отображается только в конфигурации отладки. После развертывания приложения в версии Release атрибут не отображается!

0 голосов
/ 24 декабря 2013

Telerik контролирует проверку свойства

HttpContext.Current.IsDebuggingEnabled

, чтобы решить, следует ли генерировать атрибут onError. Поэтому, чтобы удалить эти блоки, убедитесь, что отладка отключена в узле 'compilation' в вашем web.config

<compilation debug="false">    
0 голосов
/ 15 апреля 2010

Вы можете сделать что-то вроде этого, просто добавьте это внизу страницы или вызовите 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();
            }
        }
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...