在vb.net中的主页面上禁用内容页面上的href

时间:2011-05-11 00:36:35

标签: vb.net master-pages

正如标题所说。我有代码禁用runat = server的所有控件。其内容如下

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,我也想禁用它。我知道他们不会运行服务器,所以我怎么能抓住这些呢?

3 个答案:

答案 0 :(得分:0)

您可以添加runat="server"

<a runat="server" href="..." ></a>

这是使用服务器端代码维护控件的唯一方法。

答案 1 :(得分:0)

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

答案 2 :(得分: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)