asp:Gridview& asp:表格生成border =“0”属性> .NET4.0

时间:2013-06-07 13:31:06

标签: asp.net controls validation

我理解这是一个已在.NET 4.0+中修复的问题,但是,升级我们的框架尚不是一个选项。很快,但还没有。暂时我使用的是.NET 3.5。

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

使用asp:Table控件或asp:GridView控件时,生成的标记看起来如下:

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

Gridview大致相同,但包含一个&#39;规则&#39;可以通过将Gridlines属性设置为&#34; none&#34;来省略该属性。但是,将网格线设置为none时,需要处理rules属性,border =&#34; 0&#34;永远都是。

现在问题:为了使用W3验证器验证此代码,border属性必须设置为border =&#34;&#34; OR border =&#34; 1&#34;。这似乎是一个非常简单的解决方案,进一步调查证明恰恰相反。

我试图将值更改为验证程序可接受的内容:

即:

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:表总是生成border =&#34; 0&#34;我似乎无法修改价值。

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

非常感谢

5 个答案:

答案 0 :(得分:3)

我已经研究过这个问题已经有一段时间了,我在互联网上看到的任何内容都无法解决这个问题,甚至Framework 4.0推荐的想法都没有用,因为我的应用程序已经针对Framework 4.0而且仍然无法做到从GridView控件中删除“Border = 0”。我发现的是,我的Web.Config虽然是针对Framework 4.0,但在Pages标签上也将controlRenderingCompatibilityVersion设置为“3.5”。通过删除此设置,它会自动从GridView控件中删除“Border”属性。

答案 1 :(得分: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,声明性border属性添加一个内联样式声明,该声明仅适用于表本身,而不是单个单元格。

以编程方式添加border属性不使用内联样式,而是使用HTML border属性,这些属性适用于表中的所有边框。

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

答案 2 :(得分:0)

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

gridview1.Attributes.Remove("border");

gridview1.GridLines = GridLines.None;

谢谢,

答案 3 :(得分:0)

在我的案例中,使用具有许多不同设计部分的团队项目,到目前为止最好的解决方案是使用jQuery从表中删除属性边框,这个过程不会搞砸其他组件在不同的呈现方式Web应用程序的区域,并让页面通过html验证测试。

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

当然这是一个“页面上”的解决方案。希望它有所帮助!

答案 4 :(得分:0)

只需将GridLines="None"添加到gridview即可。它将删除border属性。

欢迎。