Asp.net IE8称之为;无法显示网页";使用动态占位符时

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.NET页面。网格是以编程方式生成的,并在页面运行时添加到此占位符。例如:

ASPX代码:

<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元素的范围。