我已经给出了一个隐藏和显示包含基于数据库中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);
}
}
}
}
答案 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>