【问题标题】:Hide div from code behind function whose Status is 0 in database从数据库中状态为 0 的函数代码中隐藏 div
【发布时间】:2016-04-05 11:40:29
【问题描述】:

我已经给出了一项任务,即根据数据库中的 0 和 1 状态隐藏和显示包含按钮的 div,这将由管理员设置要向相关用户显示和隐藏哪个 div;

问题是,前端 hideid() 函数在 Code behind 函数 getpermission() 之后执行,所以分配给 hiddenfield 的最后一个 div id 只有那个 div 隐藏,其余保持不隐藏
前端:-

 <div class="row">        
    <div id="dbtn1" class="col-xs-12 col-md-3 col-sm-6 ">
        <asp:Button  ID="btn1" CssClass=" thumbnail shadow tile tile-small btn-block tilepink " ForeColor="White" Font-Bold="true" Font-Size="Larger" Text="Add Party" Width="100%" runat="server"></asp:Button>
    </div>

    <div id="dbtn2" class="col-xs-12 col-md-3 col-sm-6 ">
        <asp:Button  ID="btn2" CssClass=" thumbnail shadow tile tile-small btn-block tilegray " ForeColor="White" Font-Bold="true" Font-Size="Larger" Text="Order" Width="100%" runat="server"></asp:Button>
    </div>
    <div id="dbtn3" class="col-xs-12 col-md-3 col-sm-6 ">
        <asp:Button  ID="btn3" CssClass=" thumbnail shadow tile tile-small btn-block tile-blue masterheader " ForeColor="White" Font-Bold="true" Font-Size="Larger" Text="Purchase" Width="100%" runat="server"></asp:Button>
    </div>
    <div id="dbtn4" class="col-xs-12 col-md-3 col-sm-6 ">
        <asp:Button  ID="btn4" CssClass=" thumbnail shadow tile tile-small btn-block tilelightred" ForeColor="White" Font-Bold="true" Font-Size="Larger" Text="Solution" Width="100%" runat="server"></asp:Button>
    </div>
    <asp:HiddenField ID="HiddenFieldID" runat="server" />
</div>

jQuery 脚本:

<script>

    function hideid() {
        var av = $('[id$=HiddenFieldID]').val();
        $('#' + av).css("display", "none");
    };
</script>

现在后端代码:

public void getpermission()
{
    if(HttpContext.Current.User.Identity.IsAuthenticated)
    {
        string username=HttpContext.Current.User.Identity.Name;
        System.Data.DataTable dt = DML.gettable("select l.`btn1`, l.`btn2`, l.`btn3`, l.`btn4`, l.`btn5`, l.`btn6`, l.`btn7`, l.`btn8`, l.`btn9`, l.`btn10`, l.`btn11`, l.`btn12`, l.`btn13`, l.`btn14`, l.`btn15`, l.`btn16` from menu l right join login m on m.id=l.Userid where m.userName='" + username + "'");
        if (dt.Rows.Count > 0)
        {
            for (int i = 2; i < dt.Columns.Count; i++)
            {
                int status=Convert.ToInt32(dt.Rows[0][i].ToString());
                if (status==1)
                {
                    string columnname="d"+dt.Columns[i].ToString();
                    HiddenFieldID.Value = columnname;
                    ClientScript.RegisterStartupScript(this.GetType(), "getid", "hideid()", true);
                }

            }
        }


    }

【问题讨论】:

  • 不确定您的操作是否正确?为什么不尝试让所有 div runat=server 并隐藏/显示后面的代码?
  • 让我知道如何在(for 循环)中找到随机 div 或按钮 div 的 ID 可以是任何东西
  • 目前我可以看到你有 4 个 div。它可能不止于此。所以没有动态ID。如果是这样,请在此处发布您的确切代码。
  • @PiyushKhatri 有 16 个 div 包含 16 个按钮,管理员可以在数据库中将任何 div 的值设置为 1,因此当页面加载时它会检查所有列的值 1,div id 与 columnname 相同在数据库中,所以这里循环一一检查哪个div有1个值并调用jquery函数来隐藏那个div,但是问题是循环不是在函数后面的代码停止执行后一一调用jquery函数。我已经发布了所有所有 16 个 div 旁边的代码我只发布了 4 个以提高可读性
  • 好的。明白了。所以我更喜欢你使用后面的代码而不是 jquery。在后面的代码中,您将使用 Page.FindControl 方法找到所有 div。就像循环 1 到 16,并使用 page.findcontrol("div" + i)。并从后面的代码中隐藏/显示 div。

标签: javascript c# jquery html asp.net


【解决方案1】:

它只是不能那样工作,这是设计使然。

请首先熟悉ASP.NET Page Life Cycle

您将看到 Code Behind 首先且仅在服务器上执行,然后将生成的页面发送到客户端(浏览器)。 当页面到达客户端时,不再执行代码隐藏。

为了实现您想要做的事情,您应该在将您的页面发送到客户端之前隐藏代码隐藏中的 div。

【讨论】:

  • 我再次以可读格式发布我的查询。请参考代码问题,有 16 个 div 包含 16 个按钮,管理员可以在数据库中将任何 div 的值设置为 1,因此当页面加载时,它会检查所有列的值为 1,div id 与数据库中的 columnname 相同,所以这里循环一一检查哪个div有1个值并调用jquery函数来隐藏那个div,但问题是循环不是一一调用jquery函数它在函数后面的代码停止执行后执行..我已经发布了所有16个旁边的所有代码为了更好的可读性,我只发布了 4 个 div
  • @Akash,我了解您的问题,您使用的方法表明您不了解在 ASP.NET 中会发生什么。阅读文章,了解 Code Behind 什么时候执行,了解 JavaScript 什么时候在客户端执行。
  • 能否请您知道我该如何实现这一点。我可以在查找 div 并将其设置为可见 false 之后执行此代码。我想用 jquery 的方式来做这个
  • 您的 JavaScript 无法自行运行。先解决这个问题,学习如何编写 JavaScript。
  • jquery 正在工作,先生,我期待着回答,我知道我需要学习很多东西
【解决方案2】:

就像您提到的,您的代码背后的代码正在覆盖每个值。因此,将其更改为逗号分隔的字符串。然后在 jquery 中将其更改为一个数组并循环遍历它。

将 for 循环更改为:

public void getpermission()
{
    if(HttpContext.Current.User.Identity.IsAuthenticated)
    {
        string username=HttpContext.Current.User.Identity.Name;
        System.Data.DataTable dt = DML.gettable("select l.`btn1`, l.`btn2`, l.`btn3`, l.`btn4`, l.`btn5`, l.`btn6`, l.`btn7`, l.`btn8`, l.`btn9`, l.`btn10`, l.`btn11`, l.`btn12`, l.`btn13`, l.`btn14`, l.`btn15`, l.`btn16` from menu l right join login m on m.id=l.Userid where m.userName='" + username + "'");
        if (dt.Rows.Count > 0)
        {
            for (int i = 2; i < dt.Columns.Count; i++)
            {
                int status=Convert.ToInt32(dt.Rows[0][i].ToString());
                if (status==1)
                {
                    string columnname="d"+dt.Columns[i].ToString();
                    HiddenFieldID.Value = HiddenField.Value + columnname + ",";
                    ClientScript.RegisterStartupScript(this.GetType(), "getid", "hideid()", true);
                }

            }
            //remove the last comma
            HiddenField.Value = string.Remove(HiddenField.Value.Length - 1);
        }


    }

然后在 Jquery 里面:

<script>


    function hideid() {
        /*might need to make sure this is a string before using split */
        var av = $('[id$=HiddenFieldID]').val().split(",");
        for( a in av){
          $('#' + a).css("display", "none");
          }
    };

</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多