alaa deego Ответов: 1

Как использовать сеанс с eval


привет ,
я пытаюсь использовать сеанс для передачи значения eval, а не использовать строку запроса .
как я могу передать значение Eval и как получить его на странице назначения ?
вот мой код на исходной и целевой страницах .
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
               <ItemTemplate>
                   <li>
                       <a href='<%# "../mid_topics/mid_topics.aspx?MainID="+Eval("MainID")+"&MainTopic="+Eval("MainTopic") %>'>
                           <img src='<%# "../AppImages/Main/" + Eval("MainID")  + ".jpg" %>' style="width: 210px; height: 170px;" alt="" /></a>
                       <b>
                           <asp:Label ID="Label2" Text='<%# Eval("MainTopic") %>' runat="server" Visible="True"> </asp:Label>
                       </b>
                       <asp:Label ID="Label1" runat="server" Text= '<%# Eval("MainID") %>'  ></asp:Label>
                   </li>
               </ItemTemplate>
           </asp:Repeater>

//на странице назначения
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
              <HeaderTemplate>
                                 </HeaderTemplate>
              <ItemTemplate>
                  <li><a href="index.html">
                      <img src='<%# "../AppImages/Mid/"+ Request.QueryString["MainID"].ToString()+"/" + Eval("MidID")  + ".jpg" %>' width="96" height="96" alt="spa" title="spa" /></a>
                      <h2><a href="index.html">
                          <asp:Label ID="Label2" Text='<%# Eval("MidTopic") %>' runat="server"> </asp:Label>
                      </a></h2>
                  </li>
              </ItemTemplate>
             

          </asp:Repeater>

ZurdoDev

Где-то вам нужно сделать Session ["someKey"] = someValue;

Затем вы получаете его обратно, делая someVariable = Session ["someKey"]

1 Ответов

Рейтинг:
1

Vincent Maverick Durano

Избавьтесь от тега привязки и используйте вместо него кнопку LinkButton. Или вы можете использовать ImageButton, так как вы отображаете изображения. Возможно,Вам также потребуется связать поля MainID и MainTopic в элементах управления HiddenField. Например:

<ItemTemplate>
        <li>
         <asp:ImageButton runat="server" ID="ImageButton1" ImageUrl='<%# "~/AppImages/Main/" + Eval("MainID")  + ".jpg" %> ‘ OnClick="ImageButton1_Click"
 />
      <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "MainID") %>' />
      <asp:HiddenField ID="HiddenField2" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "MainTopic") %>' />
        </li>
</ItemTemplate>


Затем в файле code behind вы можете установить значение сеанса, например:

protected void ImageButton1_Click(object sender, ImageClickEventArgs e){
        ImageButton b = (ImageButton)sender;
        RepeaterItem item = (RepeaterItem)b.NamingContainer;
        //find the Hidden values
        HiddenField mainID = (HiddenField)item.FindControl("HiddenField1");
        HiddenField mainTopic = (HiddenField)item.FindControl("HiddenField2");
        Session["MainID"] = mainTopic.Value;

        //redirect to other page
        Response.Redirect("~/mid_topics/mid_topics.aspx");
}


На странице назначения вы можете попробовать что-то вроде этого:

<a href="index.html">
                      <img src='<%# "../AppImages/Mid/"+ Session["MainID"].ToString() +"/" + Eval("MidID")  + ".jpg" %>' width="96" height="96" alt="spa" title="spa" /></a>


PS: имейте в виду, что сеансы могут быть нулевыми, поэтому вы можете проверить наличие нулей перед привязкой вашего ретранслятора на целевой странице.

ХТХ!


alaa deego

Винсент Маверик Дюрано
не могли бы вы еще раз заглянуть в код

Vincent Maverick Durano

Я обновил решение. Пожалуйста, проверьте. Кстати, вы не проголосовали за мое решение?

ZurdoDev

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

Vincent Maverick Durano

Предоставленный образец раствора находится внутри ретранслятора. Если вы заметили, что он находится внутри ItemTemplate.

ImageButton будет отображать строки изображений на основе источника. И так как он хотел использовать сеанс, единственный способ-установить его в коде позади и иметь перенаправление на стороне сервера тоже.

Я предполагаю,что это вы голосуете за решение. чёрт побери

ZurdoDev

"Если вы заметили, что это внутри ItemTemplate." - это именно моя точка зрения. Поскольку код находится внутри ItemTemplate, как я уже сказал, код будет "показывать одно и то же точное изображение снова и снова для каждой отдельной записи." Как вы думаете, ОП хочет получить одно и то же точное изображение для каждой отдельной записи? И если OP сделал это, то почему бы не закодировать его или не включить в sql вместо сеанса?

- Я предполагаю, что это ты голосуешь за решение." - Нет, я этого не делал, потому что именно об этом просил ОП. Я хочу сказать, что не думаю, что ОП действительно хочет того, о чем они просили.

И не беспокойтесь о том, что люди будут голосовать против. Это интернет, это произойдет.

Vincent Maverick Durano

-Именно это я и имею в виду. Поскольку код находится внутри ItemTemplate, как я уже сказал, код будет "показывать одно и то же точное изображение снова и снова для каждой отдельной записи."

Я так не думаю. На основе его кода:

Url_изображения=в'<%# “~/AppImages/Главная/" + оценки("MainID") + ".форматы jpg” %&ГТ; ‘

OP добавил MainID в качестве имени файла для изображений, поэтому он не статичен и не является одним и тем же точным изображением. Во время выполнения он будет генерировать строки изображений, таких как 1.jpg, 2.jpg N.jpg.

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

-И не беспокойся о том, что люди будут голосовать против. Это интернет, это произойдет", - согласился он. Это просто очень демотивирует, чтобы получить downvotes без каких-либо причин вообще. :(

ZurdoDev

Один из нас читает все это неправильно. ОП написал: "Я пытаюсь использовать сеанс для передачи значения eval, а не использовать строку запроса." Единственное, что OP получал от QueryString на целевой странице, - это MainID, так что нет, он не отличается для каждой записи. Это одно и то же.

Vincent Maverick Durano

"Единственное, что ОП получил от QueryString на целевой странице, - это MainID, так что нет, он не отличается для каждой записи. Это то же самое". - если ретранслятор не будет генерировать строки, то ваше предположение верно. :)

Насколько я понял, на странице origin будут отображаться различные изображения, основанные на MainID:

MainID 1
MainID 2
MainID 3

нажав на MainID 2, вы перенаправитесь на целевую страницу и, пройдя по значению MainID 2, отобразите соответствующую информацию на целевой странице. Думайте об этом как о мастер-детальной навигации.

Я бы не стал с тобой спорить. Давайте просто подождем обратной связи от ОП.

ZurdoDev

Мое извинение. Это я смотрел недостаточно внимательно. Я не заметил этой части url-адреса для изображения: "+ " / " + Eval ("MidID")+". jpg""

MainID использовался для выбора папки, а затем MidID использовался для отображения различных изображений. Еще раз приношу свои извинения.

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

Спасибо за ваше терпение. ;)

Vincent Maverick Durano

- Еще раз приношу свои извинения." = не беспокоиться :)

"Тем не менее, я все еще говорю, что использование сеанса для этого не является способом сделать это;" - я знаю, ОП просто усложняет ситуацию или, возможно, у ОП есть причины запретить строки запросов (например, избегать раскрытия идентификатора и иметь чистый URL)

alaa deego

Большое спасибо :)

Vincent Maverick Durano

есть ли какая-то причина, по которой вы не отметили решение?