代码之家  ›  专栏  ›  技术社区  ›  Tarik

命名空间问题

  •  2
  • Tarik  · 技术社区  · 15 年前

    通常我们都会用 using System.Linq; using System.Data.Linq; 例如,在后面的代码中,我们可以从如下源代码访问这些名称空间的成员 <%= Something.First()%> 但是当我写的时候,asp.net说它找不到 First() 在上下文中,我不得不补充 <%@ Import Namespace="System.Linq" 我觉得很奇怪,但还是成功了。因为它们的目标是同一个类,所以它们都需要单独的命名空间导入。

    代码隐藏:

    using System;
    using System.Data.Linq;
    using System.Linq;
    using System.Text
    
    namespace Something
    {
       class Items : System.Web.UI
       {
           //...
       }
    
    }
    

    但是我还需要在 HTML源代码 部分

    <%@Import Namespace="System.Linq"%>
    

    我知道有什么问题吗?或者这是ASP.NET中的某种错误。我想在编译页面时,asp.net将这两个类结合起来,将html源代码转换为cs类,并在 Control c= new Control(); 等级制度.

    提前谢谢。

    附笔: 例如,我正试图联系 第一() 在items.aspx和我提到的关于asp.net页面的所有内容中 Items.aspx

    4 回复  |  直到 15 年前
        1
  •  3
  •   md1337    15 年前

    必须在这两个位置指定名称空间。这是正常的行为。这是编译器需要的,以便在将aspx页和代码隐藏页合并到一个类并进行实际编译之前,分别预编译它们。

    默认情况下,aspx页面中已经包含了一些常用名称空间,因此不需要导入它们。但在您的情况下,您需要导入linq。

    编辑:正如joel coehoorn所说,如果不想在aspx页面中手动添加默认名称空间,可以将其添加到web.config中的默认名称空间列表中。

        2
  •  3
  •   Joel Coehoorn    15 年前

    检查web.config文件中的名称空间部分,并确保其中列出了system.linq。

    文档:
    http://msdn.microsoft.com/en-us/library/ms164642.aspx

        3
  •  0
  •   vittore    15 年前

    我不会用 First 在标记中,如果您仍然想这样做,请在后面的代码中创建一个包装器,如 SomeMethod SomeProperty 从标记访问 <%=SomeProperty %>

        4
  •  0
  •   David M    15 年前

    First 不是类上的方法,而是在 System.Linq 命名空间。即使您也可以在后面的代码中使用此扩展方法,但这并不意味着asp.net编译器可以在没有提示的情况下找到扩展方法,因此 <%@ Imports ... %> 指令。

    请注意,asp.net编译(即aspx的编译)与后面代码的编译是分开的。后者在您构建项目时运行;前者在您第一次访问页面时运行,或者使用“publish…”或web部署项目预编译页面时运行。因此,如果在这两个地方都使用扩展方法,则需要告诉每个编译器在哪里找到它。