4

我知道这是一个已在 .NET 4.0+ 中修复的问题,但是目前还不能升级我们的框架。很快,但还没有。目前我使用的是 .NET 3.5。

正如我在许多其他帖子中看到的那样,这是一个非常普遍的问题。似乎没有人真正说出为什么这是一个问题,这就是为什么许多答案似乎并没有抓住实际问题的原因。

使用 asp:Table 控件或 asp:GridView 控件时,生成的标记如下所示:

<asp:Table id="table1" border="0" runat="server"></asp:Table> 

Gridview 大致相同,但包含一个“规则”属性,可以通过将 Gridlines 属性设置为“无”来省略该属性。但是,虽然将网格线设置为 none 会处理 rules 属性,但 border="0" 始终保持不变。

现在的问题是:为了使用 W3 验证器验证此代码,必须将边框属性设置为边框 =“”或边框 =“1”。这似乎是一个非常简单的修复,进一步的调查证明恰恰相反。

我试图将值更改为验证器将接受的值:

IE:

table1.Attributes.Add("border", "1"); // This generates <asp:Table id="table1" border="0" border="1" runat="server"></asp:Table>

table1.Attributes.Add("border", null); // This generates <asp:Table id="table1" border="0" border="" runat="server"></asp:Table>

table1.Attributes["border"] = "1";  // This generates <asp:Table id="table1" border="0" border="1" runat="server"></asp:Table>

table1.Attributes["border"] = "";  // This generates <asp:Table id="table1" border="0" border="" runat="server"></asp:Table>

table1.Attributes.Remove("border"); // This generates <asp:Table id="table1" border="0"  runat="server"></asp:Table>

这些都没有达到预期的结果。asp:Table 总是生成border="0",我似乎无法修改该值。

有没有人有其他想法,再说一遍,升级框架暂时不是一个选项。我们将在相对不久的将来的某个时候进行升级 - 但不会在此版本投入生产之前。

非常感谢

4

5 回答 5

3

我已经研究这个问题很长一段时间了,我在互联网上读到的任何东西都无法解决这个问题,甚至 Framework 4.0 推荐的想法也不起作用,因为我的应用程序已经针对 Framework 4.0 并且仍然无法删除它来自 GridView 控件的“Border=0”。我发现虽然我的 Web.Config 以 Framework 4.0 为目标,但在 Pages 标记上也将 controlRenderingCompatibilityVersion 设置为“3.5”。通过删除此设置,它会自动从 GridView 控件中删除“边框”属性。

于 2013-10-21T13:35:23.217 回答
0

一种解决方法是通过点击 GridView 的 RowDataBound 事件来执行此操作,例如:

protected void MyGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
     foreach (TableCell tc in e.Row.Cells)
     {
         tc.Attributes["style"] = "border: 1px solid #ccc"; 
     }
}

使用 GridView,声明性边框属性添加了一个内联样式声明,该声明仅适用于表格本身,而不适用于单个单元格。

以编程方式添加边框属性不使用内联样式,而是使用 HTML 边框属性,浏览器将其应用于表格内的所有边框。

还有一件事,如果您使用 Eric Meyer 的重置,它会破坏 GridView 中的表格呈现。该特定问题的解决方案是从重置规则中删除所有表格元素。这可能说明牌桌本身不适合您。

于 2013-06-07T13:46:28.030 回答
0

在后面的代码中添加了以下代码,它将起作用。

gridview1.Attributes.Remove("border");

或者

gridview1.GridLines = GridLines.None;

谢谢,

于 2013-12-24T10:14:00.037 回答
0

在我的情况下,与具有许多不同设计部分的团队项目合作,迄今为止建立的最佳解决方案是使用 jQuery 从表格中删除属性边框,此过程不会与其他组件在不同区域的呈现方式混淆web 应用程序,并将让页面通过 html 验证测试。

 <script type="text/javascript">$('#TableID').removeAttr("border");</script>

当然,这是一个“页面上”的解决方案。希望能帮助到你!

于 2016-11-10T10:30:31.533 回答
0

只需添加GridLines="None"到您的网格视图。它将删除边框属性。

欢迎。

于 2017-09-19T07:16:05.767 回答