Проблема пространства имен - PullRequest
2 голосов
/ 07 апреля 2010

Обычно мы все используем 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
   {
       //...
   }

}

но мне также нужно добавить то же пространство имен Linq в Html Source part

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

Знаю ли я что-то не так или это какая-то ошибка в asp.net. Я думал, что когда страница компилируется, asp.net объединяет эти два класса и преобразует HTML-исходный код в класс CS и указывает элемент управления в иерархии Control c= new Control();.

Заранее спасибо.

P.s: Я пытаюсь достичь, например, First() в Items.aspx и всем, что я упомянул о странице asp.net, которая является Items.aspx

Ответы [ 4 ]

3 голосов
/ 07 апреля 2010

Проверьте файл web.config на наличие раздела пространств имен и убедитесь, что там указан System.Linq.

Документация:
http://msdn.microsoft.com/en-us/library/ms164642.aspx

3 голосов
/ 07 апреля 2010

Вы должны указать свои пространства имен в обоих местах. Это нормальное поведение. Это необходимо компилятору, чтобы предварительно скомпилировать страницу aspx и страницу с выделенным кодом отдельно, прежде чем объединить их в один класс и выполнить фактическую компиляцию.

По умолчанию несколько общих пространств имен уже включены в страницу aspx, поэтому вам не нужно их импортировать. Но в вашем случае вам нужно импортировать Linq.

РЕДАКТИРОВАТЬ: И, как сказал Джоэл Коухорн, вы можете добавить к этому списку пространств имен по умолчанию в Web.config, если вы не хотите добавлять их вручную в страницы aspx.

0 голосов
/ 07 апреля 2010

Я бы не использовал First в разметке, если вы все еще хотите это сделать, создайте оболочку в своем коде позади, например SomeMethod или SomeProperty, и получите доступ к нему из разметки как <%=SomeProperty %>

0 голосов
/ 07 апреля 2010

First - это не метод класса, а метод расширения, определенный в пространстве имен System.Linq.Даже если вы можете также использовать этот метод расширения в коде, это не означает, что компилятор ASP.NET может найти метод расширения без подсказки - отсюда и директива <%@ Imports ... %>.

Обратите внимание, чтоКомпиляция ASP.NET (то есть aspx) отделена от компиляции кода.Последний запускается при сборке проекта;первый запускается, когда вы открываете страницу в первый раз или предварительно компилируете ее, используя «Опубликовать ...» или проект веб-развертывания.Следовательно, каждому компилятору нужно указать, где найти этот метод расширения, если вы используете его в обоих местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...