如何在服务器端隐藏一个html talbe中的某些行

hwyqy 2016-02-02 10:08:22
有个table如下
<table>
<tr>
<td>内容11</td>
<td>内容12</td>
</tr>
<tr>
<td>内容21</td>
<td>内容22</td>
</tr>
...
</table>

其中内容含有控件,现在需要根据用户的选择隐藏某几个tr,而且不能使用css来隐藏tr,不然验证控件仍会验证,用CSS也麻烦佬。

我使用了PlaceHold
<table>
<PlaceHold ...>
<tr>
<td>内容11</td>
<td>内容12</td>
</tr>
</PlaceHold >
<tr>
<td>内容21</td>
<td>内容22</td>
</tr>
...
</table>
需要的时候,设置PlaceHold .Visible=false,tr就在浏览器端彻底消失,也没引发验证。但问题是。。。一用PlaceHold ,该tr就无法在设计端编辑,必须修改html代码,碰到有的大的改动,添加或删除控件,麻烦的,经测试,跟标记有关,tr和tr之间不能有标记,如果PlaceHold 包含了一整个table或其它的,在设计界面是可以修改的。

我这种方法不一定好,大家一般使用什么方法?
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 版主 2016-02-03
  • 打赏
  • 举报
回复
一般我都是jquery控制的。 如果一定要服务器来弄,那用gridview,在itembind事件里控制
  • 打赏
  • 举报
回复
在 asp.net 中,使用
visible='<%# v %>'
来将属性值绑定到变量 v,并且使用 this.test_tr2.DataBind(); 或者 this.DataBind(); 来使得表达式生效。 你可以有很多地方跟这个 v 变量值绑定,不仅仅是一个或者多个 tr。这样,只要改变一个变量值,就能自动隐藏界面上的多个地方了。
  • 打赏
  • 举报
回复
引用 楼主 HtoFire 的回复:
但问题是。。。一用PlaceHold ,该tr就无法在设计端编辑,必须修改html代码,碰到有的大的改动,添加或删除控件,麻烦的,经测试,跟标记有关,tr和tr之间不能有标记,如果PlaceHold 包含了一整个table或其它的,在设计界面是可以修改的。
既然你使用纯粹的 asp.net 服务器端编程,那么就要会用 runat="server" 声明。
  • 打赏
  • 举报
回复
给你写了一个例子
<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html>
<script runat="server">
    protected bool v = true;

    protected void Page_Load(object sender, EventArgs e)
    {
        var p = Request.QueryString["v2"];
        if (p != null)
            bool.TryParse(p, out v);
        p = Request.QueryString["v1"];
        if (p != null)
        {
            bool x;
            if (bool.TryParse(p, out x))
                this.test_tr1.Visible = x;
        }
    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        this.test_tr2.DataBind();
    }
</script>


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <table>
            <tr>
                <td>内容11</td>
                <td>内容12</td>
            </tr>
            <tr>
                <td>内容21</td>
                <td>内容22</td>
            </tr>
            <tr runat="server" id="test_tr1">
                <td>内容11</td>
                <td>内容12</td>
            </tr>
            <tr runat="server" visible='<%# v %>' id="test_tr2">
                <td>内容21</td>
                <td>内容22</td>
            </tr>
        </table>
    </form>
</body>
</html>
这里是用了两种方式,一种是使用绑定表达式来绑定 Visible 属性,另外一种是使用代码直接设置 Visible属性。 实际上,asp.net 使用DataList、ListView等控件来动态产生列表,根本不是用你这种方式来编程。
ajianchina 2016-02-02
  • 打赏
  • 举报
回复
别用验证控件,你的需求不是一个简单的验证域元素合法性,更没必要在服务端进行判断隐藏或显示相关控件,这是多余的,可以根据自己的判断逻辑写js来控制,在前端完成你的需求,也更简单。
Poopaye 2016-02-02
  • 打赏
  • 举报
回复
table里的数据不是靠代码填充的吗?

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧