2013-09-10 4 views
0

Мне было интересно, можно ли динамически создавать разные переменные сеанса с разными именами на основе переменной?Динамически создавать разные переменные сеанса

Я попытался выполнить таким образом, но, кажется, не нравится моя переменная

protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    LinkButton lb = (LinkButton)e.Row.FindControl("MyLinkButton"); 
    Label options = (Label)e.Row.FindControl("MyLabel"); 
    if (e.Row.RowType == DataControlRowType.DataRoow) 
    { 
    Session[lb] = options; 
//I was trying to use this to create Session Variables with Different Names Dynamically 
    } 

} 

Так что мой конечный результат я бы следующие сеансы с вне вручную создать все из них.

Session["Value"] = "MyOption" 
Session["Value1"] = "MyOption1" 
Session["Value2"] = "MyOption2" 
Session["Value3"] = "MyOption3" 
+0

Что вы пытаетесь сделать с сеансом для каждого из этих предметов? Почему бы не хранить коллекцию данных в сеансе (или еще лучше ViewState), а затем получить правильный элемент из коллекции, когда пользователь нажимает кнопку? –

+0

Я отредактировал свой вопрос, чтобы показать, какой конечный результат я пытался выполнить, и я надеялся, что я просто выполнил проверку прав моей страницы на основе этих значений сеанса. Не уверен, что в viewstate придется попробовать это и посмотреть, будет ли он работать – Jay

+0

Что вы пытаетесь достичь, может быть лучшее решение, чем создание всех этих сеансов? – christiandev

ответ

0

Вы можете создать список разделов. Для exaple:

List<string> sections=GetSectionsList(); 

для каждого элемента в списке создать переменную Session и заселить со статусом, что-то вроде этого:

foreach(string section in sections) 
{ 
    Session[section] = GetSectionStatus(section); 
} 

Затем OnLoad каждой проверки секции для значения секции сессии и Действуй соответственно. Но в совете есть сеанс для этой ситуации только в том случае, если разделы значительно меньше, например, от 2 до 5, иначе вызов db на загрузку каждого раздела будет лучше.

+0

Спасибо Shashank, в основном у меня есть приложение, и оно разделено на разделы на целевой странице, которая является gridview, которая показывает раздел \ статус приложения. Если статус отправлен, я не хочу, чтобы он мог загрузить эту страницу «section» .aspx, поэтому я решил, что могу создать несколько сеансов на основе значений в gridview, а затем выполнить быструю проверку сеанса и перенаправить их на основе этого , – Jay

+0

Исправьте меня, если я это неправильно понял. У вас есть несколько разделов на вашей сетке вместе с их отдельными статусами.И если статус отправлен, вы не хотите разрешать пользователю перенаправлять этот раздел. Если мое понимание правильное, скажите мне, как пользователь переходит к соответствующему разделу (щелчок кнопки ссылки?), Где он лежит на каждой строке сетки или общей кнопке, которая последовательно приведет вас к незавершенным разделам?). –

+0

раздел на сетке - это ссылка после щелчка. Я добавляю URL-адрес в значение раздела. Я отключу ссылку, чтобы пользователь не мог щелкнуть раздел после его отправки, однако, если вы вручную просмотрели страницу, это все равно позволит вам, поэтому, я хотел бы выполнить простую проверку с сеансом в зависимости от того, отправляется или нет – Jay

0

Вы делаете это назад. Поскольку вы находитесь в событии RowDataBound, очевидно, что вы привязываетесь к данным. Поэтому сохраните данные в Session["DataSource"] или что-то в этом роде, вместо того, чтобы повторно создавать набор данных, когда вы привязываете его по строкам.

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

Для чего вы используете данные сеанса?

+0

Я использую сеанс, чтобы разрешить или не разрешить доступ к другим страницам в зависимости от значения сеанса – Jay

+0

не уверен, что вы подразумеваете под ["DataSource"] ... Я надеялся иметь Session [gridviewrowval] = gridview разная строка Значение – Jay

+0

Это совсем неважно. Просмотрите Поставщик членства и роли. MSFT уже создал колесо здесь, вы просто должны прикрепить его к своему коду. –

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