我们在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&ChartID=e25ad666-e05b-4a92-ac0c-4f2c729b9382_chart_ctl00$MainContent$AverageCTMChart&imageFormat=Png&random=0.501658702968461" usemap="#imctl00_MainContent_AverageCTMChart" style="border-width: 0px;" alt="">
我想删除onerror
属性;如果出现问题,我真的不希望为客户提供查看堆栈跟踪的选项。我看不到任何方法来控制此控件生成的标记。 Google搜索没有提供帮助。有没有人以前处理过这个问题?
如何删除onerror
属性?
答案 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">