【发布时间】:2019-04-02 16:00:26
【问题描述】:
我正在开发一个 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>
我有一个<span id="span1">,它位于我的网络表单中,在页面的Content 部分内。我可以在我的 CodeBehind 中轻松访问它,并用它做任何我想做的事情。但是,如果我移动该跨度并将其放在页面的<asp:login> 部分中,它似乎无法识别它,它不会让我在后面的代码中访问它,它会给我一条弯曲的蓝线并说
span1 未声明。由于保护级别,它可能无法访问
此位来自设计器中的网络表单顶部
<%@ 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控件的子控件,并将从设计器文件中删除。也许你可以在你的代码隐藏中尝试Login1.FindControl("span1") -
@freefaller 我可以,因为我有 runat="server" 请查看编辑,这正是它的外观。我用它为它设置 .innerHtml 文本值
-
那么,如果您没有向我们展示您实际拥有的东西,如果我们发现问题,请不要感到惊讶。请重新阅读我编辑的评论,这是我写它的主要原因
-
@freefaller 我很抱歉。这也不行。 Intellisense 确实捡到了它,当我做这样的事情时,我也会得到一条波浪线:Login1.FindControl("span1").InnerHtml="hello"。 asp:login 具有其他控件,例如文本框和按钮,无需通过在其前面加上 Login1.FindControl 来引用它。它仅由控件名称引用
-
.FindControl返回一个对象,您需要将其装箱为正确的类型,然后才能对其调用任何属性/方法。类似CType(Logon1.FindControl("span1"), HtmlGenericControl).InnerHtml = "hello"