【问题标题】:Why is my UserControl's markup telling me "variable is not defined", despite variable being defined and public in code?为什么我的 UserControl 的标记告诉我“变量未定义”,尽管变量已定义并在代码中公开?
【发布时间】:2021-11-26 18:23:29
【问题描述】:

我的项目中有以下用户控件:

标记 (SlidingScaleTableReadonly.ascx):

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="SlidingScaleTableReadonly.ascx.vb" Inherits="Client.Project.SlidingScaleTableReadonly" %>

<table class="table">
    <thead>
        <tr>
            <th scope="col">Résultat glycémique</th>
            <th scope="col">Unité à administrer</th>
        </tr>
    </thead>
    <tbody>
        <% For Each scaleEntry In ScaleEntries %>
            <tr>
                <td><%= scaleEntry.LowerValue %> - <%= scaleEntry.HigherValue %></td>
                <td><%= scaleEntry.UnitToDeliver %></td>
            </tr>
        <% Next %>
    </tbody>
</table>

代码(SlidingScaleTableReadonly.ascx.vb):

Public Class SlidingScaleTableReadonly
    Inherits UserControl

    Public ScaleEntries As List(Of ScaleEntry)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

End Class

SlidingScaleTableReadonly.ascx 的第 11 行出现以下错误:

BC30451 'scaleEntries' 未声明。由于其保护级别,它可能无法访问。

我认为这个编译器是错误的; scaleEntries 已定义并公开。那怎么了?

【问题讨论】:

  • 即使声明了,根据代码我们可以看到该值仍然是NULL。
  • 退出 vs,然后重新加载。现在为项目重新构建所有内容 - 这应该会使这些错误消失。通常有时它们仍然会显示,但如果您构建(或运行)项目,它们就会消失。我不能说何时/为什么会发生这种情况,但 VS OFTEN 将难以解决 HTML 标记中那些嵌入的服务器端表达式。
  • @JoelCoehoorn 这将是一个运行时问题(并在运行时解决)。此类错误不会出现在编辑中。
  • 其实他们经常这样做! - 您在错误列表中看到编译错误。如上所述,重建通常会使错误消失。但是,我仍然认为那些服务器端的表达是不正确的。

标签: asp.net .net vb.net user-controls aspx-user-control


【解决方案1】:

退出 vs,然后重新加载。现在为项目重新构建 - 这应该会使这些错误消失。通常有时它们仍然会显示,但如果您构建(或运行)项目,它们就会消失。我不能说何时/为什么会发生这种情况,但 VS OFTEN 将难以解决 HTML 标记中嵌入的服务器端表达式

在大多数情况下,re-build all 会解决这个问题,但我发现有时你必须退出 VS,重新启动。全部重新构建,错误就消失了。

【讨论】:

  • 啊,是的——对不起! - 尝试重建项目 - 看看错误是否消失。如前所述,我经常不得不退出 VS。重新启动。打开项目,然后全部重建。看看这是否有效(我假设有一次它确实有效???)
  • 是的,这就是解决方案。这是一个令人沮丧的错误,我希望 VS 最终会修复它。非常感谢!
  • 我不知道何时/为什么。但有时即使重新构建也无法解决。您必须退出 VS 然后重新进入,然后重新构建所有内容。但是,通常只需重新构建即可解决此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多