我在处理 GridViews 时遇到了问题。
我有一个显示一些数据的 GridView。当我使用 IE8 单击任何行时,一切都很好,它将显示与之关联的页面。在 Chrome 下执行相同操作时,会发生浏览器正在显示目录的内容。(这真的很尴尬,因为我期待与 IE8 相同的行为)
我不知道发生了什么,我到处寻找类似的问题,但没有运气。
首先,我认为这可能与EnableViewState相关,但更改值后,一切都保持不变。
这是我的 GridView 定义的一部分:
<asp:datagrid id="sGrid" ShowHeader="True"
AutoGenerateColumns="False" runat="server"
CssClass="tablelist" EnableViewState="true" UseAccessibleHeader="true"
onselectedindexchanged="sGrid_selectedIndexChanged">
<HeaderStyle CssClass="myHeading"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderStyle-HorizontalAlign="Left">
<HeaderStyle CssClass="myHeading"></HeaderStyle>
<ItemStyle CssClass="mySummary"></ItemStyle>
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderStyle-HorizontalAlign="Left" HeaderText="C1">
<HeaderStyle CssClass="myHeading"></HeaderStyle>
<ItemStyle CssClass="mySummary"></ItemStyle>
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderStyle-HorizontalAlign="Left" HeaderText="C2">
<HeaderStyle CssClass="myHeading"></HeaderStyle>
<ItemStyle CssClass="mySummary"></ItemStyle>
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
行点击的方法如下:
protected virtual string GetRowOnClickScript(DataGridItem item) {
return String.Format("rowClick(this,'{0}','{1}','{2}');",
((myAdapter)item.DataItem).C1,
((myAdapter)item.DataItem).C2,
((myAdapter)item.DataItem).C3);
}
RowClick 是一个 js 函数:
function rowClick(sender, C1, C2, C3)
{
location.href = 'myPage.aspx?c1='+ C1 +'&c2='+ C2 + '&c3=' + C3;
}
该函数的使用如下:
if (IsBrowserIE(Request.ServerVariables["HTTP_USER_AGENT"]))
{
e.Item.Attributes.Add("onclick", GetRowOnClickScript(e.Item));
}
else //Chrome
{
AddAttributesToCell(e.Item.Cells, "onclick", GetCellOnClickScript(e.Item));
}
我相信这里的这段代码只适用于IE,不适用于任何其他浏览器!!!.
更新:
感谢 Yuriy Galanter 的帮助,我们发现无论使用哪种浏览器(至少对于 Chrome),归因都可以正常工作。