【问题标题】:Using variable or class defined in other aspx file使用在其他 aspx 文件中定义的变量或类
【发布时间】:2016-04-28 17:35:22
【问题描述】:

首先,我是使用 .NET 的菜鸟。

我在 IIS 中有一个功能已发布的 .NET 网站,但我没有源代码。 由于我必须在aspx页面中做一些更改,所以我想创建一个vs项目。

我创建了 Visual Studio 2010 项目,并将所有内容复制并粘贴到我的新项目中(我不知道这一步是否正确以及是否需要做更多的事情)但我有很多错误参考。 示例:

文件:secure/abc/main.aspx

<% @Page Language="VB" Explicit="True" Debug="False" %>
<%@ Import Namespace="System.IO" %>
<!--#include virtual="Config.aspx" -->
<!--#include virtual="Render.aspx" -->

<script language="vb" runat="server">
    Sub Page_Load(sender As Object, e As EventArgs)
        Render(sender, e)
    End Sub
</script>
<html><head></head><body>
    blah blah blah...
    <asp:Literal ID="TemplateHeader" runat="server"></asp:Literal> 
    blah blah blah...
</body></html>

文件:secure/abc/Config.aspx

<script language="vb" runat="server">
    Public Class InitiatePage
        Public Shared Function GetHeader(sender As Object, e As EventArgs, RequestPath As String)
         blah blah blah
        ...

文件:secure/abc/Render.aspx

<script language="vb" runat="server">
    Sub Render(sender As Object, e As EventArgs)
    TemplateHeader.Text = InitiatePage.GetHeader(sender, e, Request.FilePath)
...

在这种情况下,Render.aspx 中有错误:

'TemplateHeader' 未声明。它可能无法访问,因为它 保护等级。

'InitiatePage' 未声明。它可能无法访问,因为它 保护等级。

我该如何修复这个参考错误?

我需要在 Render.aspx 中包含一个引用吗?如果是,为什么在 IIS 中以发布的方式运行良好?

谢谢

【问题讨论】:

  • 我怀疑这仅在当前形式下“有效”,因为:&lt;!--#include virtual="Render.aspx" --&gt;,Visual Studio 不会像 IIS 那样处理它。这不是构建这些东西的 ASP.NET 方式。 TemplateHeader 存在于main.aspx 上,因此它将是Main 页面类中的一个属性,并且将仅在该类中使用。像这样的其他“子页面”可能会被构建为用户控件,或者可能是使用通用母版页的页面。

标签: asp.net vb.net


【解决方案1】:

当您以这种方式包含一个文件时

<!--#include virtual="Config.aspx" -->

它所做的一切都会导致页面将该文件的内容作为响应的一部分呈现,但它不会在服务器端处理该文件的内容(除了读取它并将其呈现到输出。)所以如果您在包含的文件中有服务器控件,您无法引用它们。从服务器代码的角度来看,这些控件不存在。

如果您想创建一个在多个页面中重复使用的部分页面,则可以使用user control

用户控件是一种复合控件,其工作方式与 ASP.NET 网页——您可以添加现有的 Web 服务器控件和标记 到用户控件,并为控件定义属性和方法。 然后,您可以将它们嵌入到 ASP.NET 网页中,它们在其中充当 单位。

在您的项目中,添加 -> 新项目 -> Web 窗体用户控件。这将创建一个 .ascx 文件。您可以像使用 .aspx 页面一样向该控件添加控件和内容。

然后在要显示该用户控件的页面上,在页面指令之后添加以下内容:

<% @Page Language="VB" Explicit="True" Debug="False" %>
<%@ Register TagPrefix="uc" TagName="YourControl" Src="YourControl.ascx" %>

TagPrefix 只是您选择的前缀。 TagName 是您要在页面上用于此类控件的名称。 (通常我们只使用控件的名称。)Src 是 .ascx 文件的路径和文件名。

然后,无论您想将控件添加到页面的何处,插入

<uc:YourControl id="SomeIdThatYouAssign" runat="server"/>

这是一个快速版本。链接的文档更加详尽。

【讨论】:

  • 谢谢。可以是另一种更简单的方法吗?问题是我应该只更改必要的,因为这是一个生产网页,如果我想使用用户控件,则有很多页面。
  • 您使用的是母版页吗?这就是我们通常解决在每个页面上都存在控件的方式。这使您能够修改页面的许多方面,包括添加出现在每个页面上的控件,而无需修改各个页面。这个想法是页面将主要包含自己的内容,但通常“包含”的所有内容都在母版页上。
猜你喜欢
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多