【问题标题】:How do I place codebehind in multiple files?如何将代码隐藏在多个文件中?
【发布时间】:2009-02-13 06:25:34
【问题描述】:

关于在 Visual Web Developer 2008 Express 环境中正确编译和执行的内容以及在我的 Web 服务器上失败的内容,我遇到了很多不一致的问题。

特别是,我的 Web Developer 项目中有一个 aspx 和 aspx.cs 代码隐藏,以及一些额外的 .cs 文件。它在开发服务器下构建良好并且可以正常执行。 将文件上传到服务器后,代码隐藏似乎不知道其他 .cs 文件。

让我的 aspx 应用继承其他 .cs 文件的正确方法是什么?

--- 更新 --- 由于我并没有真正找到我需要的答案,所以让我更明确地说明我正在做的事情:

我有三个文件:

默认.aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="UtilClasses" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

默认.aspx.cs

public partial class _Default : Page { }

App_Code/UtilClasses.cs

namespace UtilClasses {
  public class AClass {
    public const int A = 1;
  }
}

在本例中,如果我尝试执行以下任何操作,我的 Web 服务器上会出现编译错误:

  • 使用 @Import 引用 App_Code
  • 从 aspx.cs 代码隐藏或调用其中包含的代码
  • 从 aspx 页面调用代码。

它在 Web Developer 2008 中编译得很好。解决方案是一个网站,它通过 FTP 自动发布到我的网络服务器。正在发布的文件的确切列表是:

  • 默认.aspx
  • Default.aspx.cs
  • App_Code/UtilClasses.cs
  • web.config

【问题讨论】:

  • 您运行的是哪个版本的 Web Developer?如果您运行的是 Web Developer 2008 SP1,您使用的是 Web 应用程序(编译为 /bin 文件夹中的 dll)还是网站项目(动态编译)?
  • 这是 Web Developer 08,不确定 Service Pack。我使用的是 WebApp,但认为网站更适合我的需求。它会自动部署到我的 ftp。 cs 文件被自动放置在 App_Code 中,但是当我尝试从 app_code 调用代码时,我仍然收到“'something' doesn't exist”错误

标签: c# asp.net code-behind


【解决方案1】:

您似乎遇到了部署问题。

只需发布(在构建菜单中有一个发布项)您的 Web 应用程序/站点到一个文件夹,然后将该文件夹中的文件移动到您的服务器。

我认为您的目录中有旧的程序集文件和新类。

希望对你有帮助

【讨论】:

  • 发布工作不正常。帮帮我。对于具有 .aspx、.aspx.cs 和 .cs 的项目,两个 *.cs 文件都不会发布。我选择“仅需要运行的文件...”
  • cs 文件未发布,它们包含在 bin 目录中的程序集文件中。如果您从测试服务器中删除所有文件并复制发布目录中的所有文件,它应该可以在您的开发环境中进行测试。我认为您的问题是文件冲突。
  • 也许我需要在我的@Page 声明中更改一些内容。当我清除远程文件夹然后重新发布时,我的页面因解析器错误而失败:The file '/test/testproj.aspx.cs' does not exist.
  • 我的问题已通过网络托管公司解决。话虽如此,这已成为我部署 ASP.NET 站点的首选方式。
【解决方案2】:

您可以使用部分类。添加一个文件 ( *.cs) 并将您的类定义为部分。这样,您就可以分发您的方法、属性另一个文件

【讨论】:

    【解决方案3】:

    这是在您的网络应用程序中组织代码的一个非常常见的问题。这里有一些提示可以帮助您解决问题。

    1. 如果使用单个项目并且它是 ASP.net 网站项目,请将您的 .cs 文件放在 app_code 文件夹中。

    2. 明智地使用命名空间并跟踪命名空间中的内容。如果你有类似 Resharper 的东西,它会保存这个任务。

    3. 理想情况下,您的 Web 项目中应该只包含与页面相关的类和实用类。使用 C# express 为其他功能创建库。使用 NUnit/MbUnit 或类似工具测试这些库。

    4. 如果您怀疑某些东西是否在 Cassini 上运行但在 IIS 上不运行。开发或本地 IIS 是唯一的解决方案。

    希望有帮助!

    【讨论】:

    • 我无法让 App_Code 文件夹工作。无论是在 Web Developer 中还是在运行时,我放入的任何内容都对我的应用程序不可见。我只是收到运行时错误“当前上下文中不存在这样的东西。”
    • 您不能将 ReSharper 等插件安装到 Web Developer 的实例中,只能在 Visual Studio 的完整版中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多