隐藏数据库中状态为0的函数后面的代码

时间:2016-04-05 11:40:29

标签: javascript c# jquery html asp.net

我已经给出了一个隐藏和显示包含基于数据库中0和1状态按钮的div的任务,这将由admin设置,div将显示并隐藏给相关用户;

问题是,前端hideid()函数在代码隐藏函数getpermission()之后执行,因此最后一个div id分配给hiddenfield只有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);
                }

            }
        }


    }

2 个答案:

答案 0 :(得分:0)

它只是没有那样工作,这是设计的。

请首先熟悉ASP.NET Page Life Cycle

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

要实现您的目标,您应该在将页面发送到客户端之前隐藏Code Behind中的div。

答案 1 :(得分:0)

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

将循环更改为:

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>