Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметров из сгенерированной страницы 
:(
    Опции темы
EASports
Дата 23.9.2008, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Прошу помощи в таком вопросе:
Создаю страницу новостей. 
Как должно быть:
Заходим на страницу, происходит коннект к базе, запрос оттуда 20 последних записей из таблички News и через элемент asp:Repeater (или любой другой того же типа) происходит вывод ссылок с названиями новостей и датами их добавления. По щелчку по ссылке, должна открыться страница News.aspx, в которую должен передаться ID (из базы) ссылки (т.е. параметр), по которой произошёл щелчок. И соответственно по этому параметру уже должно отобразиться содержание нововсти.
Вопросы:
1. Как в строке в блоке Repeater отобразить название и дату сразу? 
(Типа
Код

 <asp:HyperLink ID="hz" Text="<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Date")%>">
 - так не получается, дак вот, как запросить в этой строке сразу несколько значении из текущей строки?)
2. Как сделать механизм передачи параметра в целевую страницу при щелчке по ссылке (на карайняк по кнопке)? 
Когда делал по кнопке, сразу после щелчка вылетала ошибка: 
"Недействительный аргумент обратной передачи или обратного вызова.  Проверка события включена с помощью <pages enableEventValidation="true"/> в конфигурации или <%@ Page EnableEventValidation="true" %> на странице.  В целях безопасности эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова поступают из элемента управления сервера, сформировавшего их изначально.  Если данные действительные и ожидавшиеся, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи и обратного вызова для проверки". И если можно, разъясните, что за такая ошибка и чем вызвана?
PM MAIL   Вверх
Idsa
Дата 23.9.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(EASports @  23.9.2008,  04:26 Найти цитируемый пост)
- так не получается, дак вот, как запросить в этой строке сразу несколько значении из текущей строки?)

Замените кавычки, в которые завернуто значение Text, на одинарные:
Код

<asp:HyperLink ID="hz" Text='<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Date")%>'>


Цитата(EASports @  23.9.2008,  04:26 Найти цитируемый пост)
Как сделать механизм передачи параметра в целевую страницу при щелчке по ссылке (на карайняк по кнопке)? 

Самый простой вариант - ссылка с указанием в качестве Get-параметра идентификатора новости.

Цитата(EASports @  23.9.2008,  04:26 Найти цитируемый пост)
И если можно, разъясните, что за такая ошибка и чем вызвана? 

Я уже не припомню подробностей... но в гугле по этой ошибке много информации. По-моему я в свое время так и не смог побороть эту ошибку и просто отключил валидацию.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
EASports
Дата 23.9.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Цитата

Замените кавычки, в которые завернуто значение Text, на одинарные

Такое я уже пробовал. Не работает. "Перед директивами препроцессору могут находиться только символы пробелов".
Цитата

Самый простой вариант - ссылка с указанием в качестве Get-параметра идентификатора новости

Не катит. Это придётся тогда забивать в базу ID новости с параметрами в строку адреса. А я хочу, чтобы в базе хранился текст новости или там html-код в одном из полей, название, дата и ID. Ссылку не хочу хранить.
На крайняк пусть это будет GET, но как сгенерировать из ID и заранее определённой страницы, будем считать, что это News.aspx?
PM MAIL   Вверх
wotker
Дата 23.9.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 18.7.2006
Где: Ростов-на-Дону

Репутация: 1
Всего: 5



Цитата

Не катит. Это придётся тогда забивать в базу ID новости с параметрами в строку адреса. А я хочу, чтобы в базе хранился текст новости или там html-код в одном из полей, название, дата и ID. Ссылку не хочу хранить.
На крайняк пусть это будет GET, но как сгенерировать из ID и заранее определённой страницы, будем считать, что это News.aspx?

Ничего не понял. У тебя в базе хранится id новости. Почему ты не хочешь передавать его в качестве параметра?
Цитата

Ссылку не хочу хранить.

а ссылку на страницу хранить никто и не предлагает
--------------------
ICQ ::            347306684e-mail ::         wotker[at]rambler[dot]ru 
PM MAIL ICQ   Вверх
EASports
Дата 24.9.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Цитата

Почему ты не хочешь передавать его в качестве параметра?

Я согласен его передать в качестве параметра, объясни мне как провернуть следующее:
Из базы грузятся названия и в скобочках даты новостей в количестве 20 штук (последних) и отображаются в виде гиперссылок, указывающих на страницу News.aspx, когда щёлкаешь по ссылке открывается страничка News.aspx, в которую любым методом передайтся идентификатор новости (который тоже запрашивается при запросе названия и даты из базы) и выводится текст новости. Просто объясни как передать из динамически сгенерированной ссылки параметр. Если можно, напиши простенький примерчик, в котором присутствует Repeater, к которому через DataSource присоединён массив параметров (id-шников например) в теле которого HyperLink'и, при щелчке по которым параметр отправляется в целевую страницу.
Ну типа 
Код

<asp:Repeater id="anything" runat="server">
    <ItemTemplate>
        <asp:HyperLink ID="link" runat="server" NavigateUrl="~/News.aspx" Text='<%# DataBinder.Eval(Container.DataItem, "Name_") %>'></asp:HyperLink><br /><br />
    </ItemTemplate>
</asp:Repeater>

PM MAIL   Вверх
Idsa
Дата 24.9.2008, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Код

<asp:Repeater id="anything" runat="server">
    <ItemTemplate>
        <asp:HyperLink ID="link" runat="server" NavigateUrl='"~/News.aspx" + <%# DataBinder.Eval(Container.DataItem, "Id") %>' Text='<%# DataBinder.Eval(Container.DataItem, "Name_") %>'></asp:HyperLink><br /><br />
    </ItemTemplate>
</asp:Repeater>


Это сообщение отредактировал(а) Idsa - 24.9.2008, 05:17


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
wotker
Дата 24.9.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 18.7.2006
Где: Ростов-на-Дону

Репутация: 1
Всего: 5



Idsa, только еще разделитель забыл
Код

NavigateUrl='"~/News.aspx?" + <%# DataBinder.Eval(Container.DataItem, "Id") %>'

--------------------
ICQ ::            347306684e-mail ::         wotker[at]rambler[dot]ru 
PM MAIL ICQ   Вверх
EASports
Дата 24.9.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Сделал таким образом. Откомпилилось нормально, но при щелчке по ссылке переход произошёл на страницу, у которой в строке адреса вылезло следующее: "http://localhost:2357/WebPortal/%22~/News.aspx?"%20+%20<%#%20DataBinder.Eval(Container.DataItem,%20"Id")%20%>"
Конфуз вышел.  smile
Может какой-то нюанс я забыл? Как принять-то бы теперь параметр в целевой странице?
Да и ещё вопросик, реально ли как-нибудь в коде присвоить какой-нибудь переменной выражение <%#Container.DataItem%>, чтобы использовать это в создании ссылки?
PM MAIL   Вверх
Idsa
Дата 24.9.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Финальная версия smile
Код

NavigateUrl='"~/News.aspx?id=" + <%# DataBinder.Eval(Container.DataItem, "Id") %>'



--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
EASports
Дата 25.9.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



То же самое.
Адрес только теперь такой:
"http://localhost:2357/WebPortal/%22~/News.aspx?id="%20+%20<%#%20DataBinder.Eval(Container.DataItem,%20"Id")%20%>"

Дак чего, никто не знает, реально ли как-нибудь в коде присвоить какой-нибудь переменной выражение <%#Container.DataItem%>?


PM MAIL   Вверх
PashaPash
Дата 25.9.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 7
Всего: 49



EASports, неужели синтаксис датабиндинга настолько сложен, что на такие мелочи уходит по 3 дня?
Код

... NavigateUrl='<%# "~/News.aspx?id=" + DataBinder.Eval(Container.DataItem, "Id").ToString() %>' ...

Цитата(EASports @  25.9.2008,  09:30 Найти цитируемый пост)
Дак чего, никто не знает, реально ли как-нибудь в коде присвоить какой-нибудь переменной выражение <%#Container.DataItem%>?

Реально никакой переменной выражение  <%#Container.DataItem%> присвоить нельзя. Потому что это выражение имеет смысл только в разметке страницы.


--------------------
PM MAIL WWW   Вверх
EASports
Дата 25.9.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Спасибо большое, PashaPash. Именно это мне и было нужно. Выручил. А по поводу:
Цитата

неужели синтаксис датабиндинга настолько сложен, что на такие мелочи уходит по 3 дня

к сожалению ушло значительно больше 3 дней... Если бы знал синтаксис датабиндинга, сюда бы не обращался. Ещё раз спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.