2009-11-11 2 views
0

Я генерирую некоторый head html в загрузке страницы и из-за этого я запрашиваю базу данных один раз. на странице я снова запрашиваю базу данных и помещаю данные в html со встроенным кодом.asp.net code за переменной

мой вопрос - есть ли лучший способ сделать это? Я не хочу каждый раз запрашивать базу данных и вызывать заполненные переменные из встроенного кода. что-то вроде page.addVariable в Page_Load и достичь тех, на инлайн как page.variables [ «VARIABLENAME»]

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

+0

Вы можете получить фрагмент кода для нас? – JustLoren

ответ

3

Если я понимаю, что вы просите, вы можете сделать аксессор и установить его в Protected , Это позволит вам получить к нему доступ со страницы.

Если вы хотите предотвратить вызов базы данных при обратных вызовах, вы всегда можете добавить информацию в состояние просмотра на странице.

Информация о состоянии зрения, скрытые поля и печенье: http://www.csharphelp.com/archives/archive207.html

+0

Я думаю, что viewstate - лучший способ пойти, потому что его все о том, что страница не сеанс или приложение. когда я пытался добавить и получить ProfileCommon из viewstate, он выбрасывает System.Runtime.Serialization.SerializationException: Введите 'ProfileCommon' в Assembly 'App_Code ._- aako5a, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null' is not помечены как сериализуемые. исключение? –

+0

это проблема с сериализацией, я попытаюсь найти ссылку, в которой говорится об этом, и пусть это произойдет через некоторое время. – kemiller2002

1

Я не уверен, если это то, что вы после этого, но вы можете использовать HiddenField для хранения любых данных, которые вы хотите на стр.

Кроме того, если вам не нужно его быть на странице, вы можете использовать Session или ViewState.

Вот пример использования ViewState как свойство (NB вы можете поменять местами ViewState с сессии, посмотрите на ссылки, которые я дал вам для объяснения между ними.):

public string YourProperty 
{ 
    get 
    { 
     object content = ViewState["YourProperty"]; 
     if (content == null) 
     { 
      return string.Empty; 
     } 
     return content.ToString(); 
    } 
    set 
    { 
     ViewState["YourProperty"] = value; 
    } 
} 

Обратите внимание, что все, что вы положить в ViewState или SessionState должен быть помечен как Serializable.

Если это довольно простой класс, просто отметьте класс тегом [Serializable].

+0

Это не будет работать как объект! = Строка. Лучше сделайте что-нибудь вроде «return (string) (ViewState [" YourProperty "] ??" ") ' –

+1

Да, будет. ViewState возвращается как объект. Я предпочитаю сначала выполнить сравнение объекта, который был возвращен, чтобы убедиться, что есть значение.Таким образом, мне никогда не придется полагаться на настройку значения, прежде чем я смогу его использовать/проверить. Возможно, используя символ немного очистит код, но это один из тех символов, которыми я никогда не был поклонником. – GenericTypeTea

+0

@Jan, каждый объект имеет метод ToString. –

0

Это данные, которые вы извлекаете из конкретной страницы базы данных, специфичной для пользователя или глобальной для всего приложения?

Если данные конкретны для вас, то вы можете использовать Session State.

Если данные являются глобальными для всего приложения, вы можете использовать Application State.

Какой бы вы ни использовали, вы можете реализовать извлечение данных в Session_Start (будет называться только один раз для каждого пользователя) или Application_Start (будет вызываться только один раз при запуске веб-приложения) в файле Global.asax.

+0

его о том, что именно эта страница и viewstate - лучший способ пойти. но теперь я получаю исключение из ProfileCommon не сериализуем :) –

Смежные вопросы