Asp.net IE8称之为;无法显示网页";使用动态占位符时
我有一个使用占位符的ASP.NET页面。网格是以编程方式生成的,并在页面运行时添加到此占位符。例如: ASPX代码:Asp.net IE8称之为;无法显示网页";使用动态占位符时,asp.net,gridview,internet-explorer-8,.net-4.0,placeholder,Asp.net,Gridview,Internet Explorer 8,.net 4.0,Placeholder,我有一个使用占位符的ASP.NET页面。网格是以编程方式生成的,并在页面运行时添加到此占位符。例如: ASPX代码: <asp:PlaceHolder ID="myPlaceHolder" runat="server" /> 代码隐藏: foreach (var country in Tables.Countries()) { var nGrid = BuildGrid(country.Code); if (nGrid.Rows.Count > 0) {
<asp:PlaceHolder ID="myPlaceHolder" runat="server" />
代码隐藏:
foreach (var country in Tables.Countries())
{
var nGrid = BuildGrid(country.Code);
if (nGrid.Rows.Count > 0)
{
var lTitle = new Literal();
lTitle.Text = "<h2>Stats for country " + country.Name + "</h2>";
myPlaceHolder.Controls.Add(lTitle);
myPlaceHolder.Controls.Add(nGrid);
}
nGrid.Dispose();
}
private GridView BuildGrid(short countryCode)
{
GridView nGrid = new GridView();
nGrid.ID = "gr_" + countryCode;
nGrid.SkinID = "rpSkin";
nGrid.AutoGenerateColumns = false;
nGrid.AllowPaging = false;
nGrid.AllowSorting = false;
nGrid.RowStyle.VerticalAlign = VerticalAlign.Top;
nGrid.EnableViewState = false;
var nField = new BoundField
{
HeaderText = "People",
DataField = "PeopleCount"
};
nGrid.Columns.Add(nField);
// more BoundFields of this type exist
// This is basically the GridViewHelper class that gets Row Totals
// Disabling this doesn't help, either
HelpGrid(nGrid);
nGrid.DataSource = Country.GetPeople(countryCode);
nGrid.DataBind();
return nGrid;
}
foreach(表中的var country.Countries())
{
var nGrid=BuildGrid(country.Code);
如果(nGrid.Rows.Count>0)
{
var lTitle=new Literal();
lTitle.Text=“国家统计数据”+国家名称+”;
myPlaceHolder.Controls.Add(lTitle);
myPlaceHolder.Controls.Add(nGrid);
}
nGrid.Dispose();
}
私有GridView BuildGrid(短国家代码)
{
GridView nGrid=新的GridView();
nGrid.ID=“gr_389;”+国家代码;
nGrid.SkinID=“rpSkin”;
nGrid.AutoGenerateColumns=false;
nGrid.allowpage=false;
nGrid.AllowSorting=false;
nGrid.RowStyle.VerticalAlign=VerticalAlign.Top;
nGrid.EnableViewState=false;
var nField=新边界字段
{
HeaderText=“人”,
DataField=“PeopleCount”
};
nGrid.Columns.Add(nField);
//存在更多此类边界字段
//这基本上就是获取行总数的GridViewHelper类
//禁用此功能也无济于事
帮助网格(nGrid);
nGrid.DataSource=Country.GetPeople(countryCode);
nGrid.DataBind();
返回nGrid;
}
此页面在Opera和Firefox中完美运行。Internet Explorer 8向我显示“无法显示网页”屏幕
有什么想法吗?在以编程方式创建控件时,您总是会遇到很多问题。它可能在get上工作,但在post上不工作,您在OnClick处理程序中遇到问题,等等。。要使编程控件正常工作,有很多困难需要克服 在我看来,你真的不需要通过编程来创建这些。您可以像创建用户控件一样轻松地创建网格控件,然后传递数据源。如果需要的话,您可以在运行时加载用户控件,然后删除整个构建网格的动态部分,让asp.net来处理这些混乱
这并不是说你做不到,就像人们一直做的那样。我只是建议你做更多的工作,以你现在的方式来做。可以吗?我需要以编程方式创建它有多种原因。无论如何,问题是上面的代码可以与Firefox和Opera一起使用,但不能与IE一起使用。这意味着它可能会以某种方式生成无效的HTML,或者数据的大小导致超时。我将其划分为IE,但不喜欢以编程方式添加到GridView中的边界字段!注释掉nGrid.Columns.Add(nField);至少显示页面!仍在探索中…检查Firefox中的输出HTML,看看它是否有效。可能有助于包括您的aspx代码以及一个简单的占位符。。。更新了文章以包含它。您需要首先确定是什么HTML破坏了IE,然后才能缩小导致它的ASP.NET元素的范围。