Переменная область видимости на коде asp.net в C # (надеюсь, ежу понятно!) - PullRequest
2 голосов
/ 18 марта 2011

У меня есть страница asp.net (C # codebehind), а в page_load есть различные запросы linq, возвращающие анонимные типы, такие как:

var customersAdded = from r in AddedRecords
                                 select new { Ref = r.CustomerRef, Name = r.Customer_Name };

На странице у меня есть кнопка с именем 'export toExcel ', и в этом событии buttonClick я пытаюсь сослаться на CustomersAdded.Он говорит, что не существует в контексте.Я знаю, что в прошлом я преодолевал подобные проблемы, используя такие вещи, как:

if (File.Exists(System.Web.HttpContext.Current.Server.MapPath("~/App_Variants/" + GetUserTheme().ToString() + "/images/" + i.ImageUrl)))

Но пока не повезло.

Так что вопрос в том, как обратиться кпеременная?И для справки, если я скажу, хотел бы сослаться на значение в элементе управления (например, текстовое поле на странице), будет ли применяться тот же или другой подход?

Спасибо!

Отметить

1 Ответ

3 голосов
/ 18 марта 2011

Похоже, вы только что объявили свою переменную как локальную переменную для Page_Load.Чтобы ссылаться на переменную в любом другом методе, он, по крайней мере, должен быть членом класса.Конечно, вы используете анонимный тип, и сам тип также должен находиться в области видимости.

Одним из способов решения этой проблемы является объявление типа в классе, возможно, просто в виде внутренней структуры,Тогда тип больше не является анонимным, поэтому вы можете объявить члена класса как коллекцию вашего нового типа.Вы можете присвоить эту переменную в Page_Load, а затем получить доступ к переменной в другом месте вашего класса.

Редактировать:

Разновидность "ленивой загрузки" Яв моем комментарии упоминается не языковая функция с ключевым словом lazy, ни что-либо, связанное с yield и т. д., а просто вот что:

private IQueryable<AddedRecord> _customersAdded;

// make this public if you want to access outside the class
private IQueryable<AddedRecord> CustomersAdded
{
    get
    {
        if (_customersAdded == null)
        {
            // replace next statement with the query you need
            _customersAdded = AddedRecords.Where(something);
        }
        return _customersAdded;
    }
}

Теперь, если вам нужно больше параметров дляэтот запрос происходит, вы всегда можете заполнить _customersAdded заранее.По общему признанию, это своего рода тривиальный пример.

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