繁体   English   中英

无法访问asp.net应用程序中的控件

[英]cannot access controls in asp.net application

我正在使用ASP.NET VB.NET Web应用程序。 我从内部的另一个应用程序继承了一堆表格。 在登录页面上工作时,我遇到了一个非常奇怪的问题。

这是我的代码的缩写版本:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
  <table> 
    <tr> 
      <td>
          <span id="Span1" runat="Server" style="Color: Red"></span>
      </td>
    </tr>
    <tr>
      <td>
        <asp:Login ID="Login1" runat="server">
         <LayoutTemplate>
           <table>
           <tr>
             <td> 
                <span id="Span1" runat="Server" style="Color: Red"></span>
             </td>
           </tr>
           </table>
          </LayoutTemplate>
       </asp:login>
     </td>
    </tr>
   </table>
</asp:Content>

我在页面的“ Content部分内的Web表单内有一个<span id="span1"> 我可以在我的CodeBehind中轻松访问它,并做我想做的任何事情。 但是,如果我移动该跨度并将其放在页面的<asp:login>部分中,它似乎无法识别它,也不会让我在后面的代码中访问它,这给了我一条弯曲的蓝线并说

未声明span1。 由于保护级别,它可能无法访问

这一点来自设计器中Web表单的顶部

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Login.aspx.vb" Inherits="_Default" MasterPageFile="~/Site.master" %>

这一点来自Login.aspx.vb页面

Partial Class _Default

再说一遍, id="span1"在上面的代码中显示的地方工作得很好,但是当我将其移动到内部时,我将不再引用它。 由于我正在谈论此问题,因此,我无法在其中添加任何新控件,因为我无法在vb.net中引用任何其他控件。 (此表格几乎是从另一个项目复制的,一切正常,但我不确定为什么会有这个奇怪的问题)

我注意到很多人都有类似的问题,但就我而言,我正在使用<asp:login> ,但我真的不确定它如何影响我的控件。

编辑: <span id="Span1" runat="Server" style="Color: Red"></span>

您需要在Login1控件上使用FindControl

HtmlGenericControl hgc = Login1.FindControl("Span1") as HtmlGenericControl;
hgc.InnerText = "Span Found";

VB

Dim hgc As HtmlGenericControl = CType(Login1.FindControl("Span1"),HtmlGenericControl)
hgc.InnerText = "Span Found"

要访问服务器端的控件,必须在标签上包含“ runat ='server'”属性。 那就是告诉.NET的原因,任何给定的控件都应该在服务器端以及前端都可以使用。

请注意,它将更改在呈现的HTML中生成的ID

<span id="span1" runat="server"></span>

根据我的意见,并根据OP的要求...

您在命名容器方面遇到了问题。

<span runat="server"><asp:Login><LayoutTemplate>它作为对象存在于页面中,您可以直接对其进行引用。

一旦在该<LayoutTemplate>它,它就会成为<asp:Login>控件的子代。

因此,要访问该控件,您可以使用以下命令...

CType(Logon1.FindControl("span1"), HtmlGenericControl).InnerHtml = "hello"

FindControl将带回一个对象,但是需要先将其“装箱”为正确的类型,然后才能访问InnerHtml属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM