2011-05-11 69 views
2

正如标题所示。我有禁用runat = server的所有控件的代码。它如下禁用vb.net中Master页面的内容页面的href

Dim c As Control 
For Each c In pc 
    If c.HasControls Then DisableAllControls(c.Controls) 

    If c.GetType.ToString.ToLower.IndexOf("webcontrols.dropdownlist") > -1 Then 
     DirectCast(c, DropDownList).Enabled = False 
    ElseIf c.GetType.ToString.ToLower.IndexOf("webcontrols.textbox") > -1 Then 
     DirectCast(c, TextBox).Enabled = False 
    ElseIf c.GetType.ToString.ToLower.IndexOf("webcontrols.radiobuttonlist") > -1 Then 
     DirectCast(c, RadioButtonList).Enabled = False 
    ElseIf c.GetType.ToString.ToLower.IndexOf("webcontrols.radiobutton") > -1 Then 
     DirectCast(c, RadioButton).Enabled = False 
    ElseIf c.GetType.ToString.ToLower.IndexOf("webcontrols.button") > -1 Then 
     DirectCast(c, Button).Enabled = False 
    End If 
Next 

但我有几个href在那里,我想也禁用。我知道他们不会跑服务器,所以我怎么能抓住这些?

+0

抱歉无法格式化。我不知道如何在这里格式化代码。 – pollko 2011-05-11 00:36:57

+0

有了这个,我必须得到我身边的每个href的名称并禁用它。没有意义。如果你读我的代码,我禁用所有按钮,ddl的txtboxes。我需要为标签做同样的事情 – 2011-05-11 17:59:40

回答

0

您也可以将runat =“server”添加到HTML控件中。没有它,你将无法访问服务器端的控件,你将无法禁用它。

0

该代码看起来无效(If c.HasControls Then DisableAllControls(c.Controls)没有匹配的End If),但也许VB.NET已添加内联If语法就像没有我意识到。

不管怎样,只要禁用所有runat="server"控制,你应该能够只是这样做:

For Each c as WebControl In pc.OfType(Of WebControl)() 
    ' Put your recursive call here as before 
    c.Enabled = False 
Next 

现在,为“禁用”的其他元素,你可以添加runat="server"他们(也许不是如果你已经生成了HTML,甚至可能),或者你可以使用一些JavaScript。我要通过禁用来假设你的意思是隐藏在<a>标记的情况下?

jQuery让这个简单,用示例脚本是这样的:

$(document).load(function() { 
    $('a').hide(); 
}); 

或:

/* hides all a tags under an element with class="someClass" */ 
$(document).load(function() { 
    $('.someClass a').hide(); 
}); 

然后你可以有你的代码使这个脚本,使用这样的事情在你的页面:

Dim script as String = "" /* your javascript here */ 
Me.ClientScript.RegisterClientScriptBlock(Me.GetType(), "HideTagsScript", script)