我有一个 ascx 在这样的转发器中使用 Eval:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="Similar.ascx.vb" Inherits="x.y.z.Similar" %>
<asp:repeater runat="server" id="rptAlternatives" visible="false" Enableviewstate="false">
<HeaderTemplate>
<section id="similar" class="sidelist sideModule">
<h3>Possible Alternatives:</h3>
<ul class="sideborder">
</HeaderTemplate>
<ItemTemplate>
<li>
<a href="/bar/<%# Eval("URL")%>" class="box">foo</a>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</section>
</FooterTemplate>
</asp:repeater>
这在我的开发 PC 上运行良好,但是当我将它部署到我们的实时服务器时它失败了:Compiler Error Message: BC30451: 'Eval' is not declared. It may be inaccessible due to its protection level.
真正奇怪的是,有时重新启动应用程序池会使其消失,然后有时又会再次出现。此外,它不会在使用Eval
.
本地环境是 IIS 7.5.7600.16385,应用程序池运行 ASP.NET v4.0 Classic。服务器环境是一样的。我在我的机器上从 VS 发布并将其复制到实时服务器上进行部署。
在此部署之前,现场站点使用的是 v2.0。将站点升级到 v4.0 是我们尝试发布的更改的一部分。作为此版本的一部分,此代码没有更改。它一直使用 Eval,这一直很好。
我已经安装了 Visual Studio 11 beta,但我在这个项目中使用的是 2010。
有什么想法可能导致这种情况吗?
编辑:
这个专家交流帖子似乎描述了完全相同的行为。他们通过在 ascx 和 ascx.vb 文件中更改其类的名称来“修复”它。它们在更改之前匹配,并且在更改之后匹配,但是更改显然在编译器中慢跑了一些东西。我可能会试一试,但特定的 ascx 会停止工作似乎并不令人满意。
我还发现很多帖子建议将其更改为DataBinder.Eval(Container.DataItem, "URL")
. 但是,当代码之前工作并且突然停止时,我再次不愿意这样做。这是我不愿意使用的神奇而随机的“修复”。