Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Передача параметров из сгенерированной страницы


Автор: EASports 23.9.2008, 00:26
Прошу помощи в таком вопросе:
Создаю страницу новостей. 
Как должно быть:
Заходим на страницу, происходит коннект к базе, запрос оттуда 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, чтобы зарегистрировать данные обратной передачи и обратного вызова для проверки". И если можно, разъясните, что за такая ошибка и чем вызвана?

Автор: Idsa 23.9.2008, 00:39
Цитата(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 Найти цитируемый пост)
И если можно, разъясните, что за такая ошибка и чем вызвана? 

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

Автор: EASports 23.9.2008, 11:49
Цитата

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

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

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

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

Автор: wotker 23.9.2008, 14:14
Цитата

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

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

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

а ссылку на страницу хранить никто и не предлагает

Автор: EASports 24.9.2008, 00:16
Цитата

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

Я согласен его передать в качестве параметра, объясни мне как провернуть следующее:
Из базы грузятся названия и в скобочках даты новостей в количестве 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>

Автор: Idsa 24.9.2008, 04:22
Код

<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>

Автор: wotker 24.9.2008, 20:17
Idsa, только еще разделитель забыл
Код

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

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

Автор: Idsa 24.9.2008, 21:12
Финальная версия smile
Код

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

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

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


Автор: PashaPash 25.9.2008, 15:06
EASports, неужели синтаксис датабиндинга настолько сложен, что на такие мелочи уходит по 3 дня?
Код

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

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

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

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

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

к сожалению ушло значительно больше 3 дней... Если бы знал синтаксис датабиндинга, сюда бы не обращался. Ещё раз спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)