Передача значения в url-запрос
Я пытаюсь найти решение проблемы, с которой я сталкиваюсь, передавая значение одной форме " SongsByBand "в другую форму в моем проекте"ViewDetails". "SongsByBands" - это, по сути, список групп, в котором каждая песня, исполняемая этой группой, представлена в пуленепробиваемом списке. Я хочу каким-то образом перейти от одной песни в маркированном списке к форме "ViewDetails"; ViewDetails принимает идентификатор песни для доступа к дополнительной информации об этой конкретной песне. Песни и группы содержатся в отдельных таблицах базы данных SQL Server, и Entity Framework используется для доступа к полям из каждой таблицы.
Соответствующий код в форме "SongsByBand" следует:
&ЛТ;АСП:контента ID="Content2" атрибутом ContentPlaceHolderID="cpMainContent" атрибут runat="сервер"и GT;
<asp:EntityDataSource ID= "EntityDataSource1" runat= "сервер">
< / asp:EntityDataSource>
<asp: Repeater ID= "Repeater1" runat= "server" >
& lt;ItemTemplate>
&ЛТ;Н3&ГТ; &ЛТ;АСП:литерал идентификатор="Literal1" атрибут runat="сервер"
Текст=в'<%# Ивала("Band1")%&ГТ;'&ГТ;&ЛТ;/АСП:литерал&ГТ;&ЛТ;/Н3&ГТ;
&ЛТ;Н4&ГТ; &ЛТ;АСП:литерал идентификатор="Literal2" атрибут runat="сервер"
Текст=в'<%# Ивала("Записки")%&ГТ;'&ГТ;&ЛТ;/АСП:литерал&ГТ;&ЛТ;/Н4&ГТ;
<asp: BulletedList ID=" SongList "runat= "server" DisplayMode= " LinkButton"
DataSource = '<%# Eval ("Songs") % & gt;' DataTextField= " Title"
DataValueField= "Id">
< / asp:BulletedList>
< / ItemTemplate>
< / asp: ретранслятор>
< / asp: содержание>
С сопроводительным кодом позади:
public partial class Songs_SongsByBand : BasePage { protected void Page_Load(object sender, EventArgs e) { using (TRTDevelopmentSongsAndBandsEntities myEntities = new TRTDevelopmentSongsAndBandsEntities()) { var AllSongs = from Band in myEntities.Bands.Include("Songs") orderby Band.Band1 select new { Band.Band1, Band.Notes, Band.Songs }; Repeater1.DataSource = AllSongs.ToList(); Repeater1.DataBind(); } } }
[NB: я опустил утверждения "using".]
Соответствующий код в форме "ViewDetails" снова следует:
<asp:Content ID="Content2" ContentPlaceHolderID="cpMainContent" Runat="Server"> <h1><asp:Label ID="TitleLabel1" runat="server" ></asp:Label></h1><br /> <asp:Label ID="BandLabel1" runat="server" ></asp:Label><br /> <asp:Label ID="SongWriterLabel1" runat="server" ></asp:Label><br /> <asp:Label CssClass="Comments" ID="CommentsLabel1" runat="server"></asp:Label> <br /> <asp:HyperLink ID="HyperLink2" runat="server" >For Song Clip, Click Here </asp:HyperLink> <br/> </asp:Content>
Со следующим кодом позади:
общественные частичная класс Songs_ViewDetails : BasePage
{
protected void Page_Load(отправитель объекта, EventArgs e)
{
int songId = конвертировать.ToInt32 (Запрос.QueryString. Get ("SongId"));
использование(TRTDevelopmentSongsAndBandsEntities
myEntities = новые TRTDevelopmentSongsAndBandsEntities())
mySong = (от r в myEntities.Песни.Include ("Группа")
где r.Id = = songId
выберите r).Метода singleordefault();
если (mySong != null)
{
TitleLabel1.Text = "Title: -" + mySong.Заглавие;
BandLabel1.Text = "группа / певец: -" + mySong.Band.Band1;
SongWriterLabel1.Text = "автор песен: -" + mySong.песенник;
CommentsLabel1.Text = "комментарии: -" + mySong.Комментарии;
HyperLink2.Navigateurl свойство = mySong.ClipLink;
HyperLink2.Привязку();
Название = mySong.Заглавие;
MetaDescription = mySong.Комментарии;
}
}
}
Что я уже пробовал:
Я работал над этим в течение нескольких дней и попробовал несколько подходов, чтобы захватить "SongId" и передать его в форму" ViewDetails".:
Я попытался, используя гиперссылку в "маркированный список", используя navigateurl свойство с вариациями следующий синтаксис:
NavigateUrl='<%# " ViewDetails?SongId= " + Item. Id. ToString () %>'
Но код не распознает предмет, идентификатор или что-то вроде Песни.Удостоверение личности или любая другая форма, которую я могу придумать.
Как вы можете заметить, я вставил DataValueField= " Id " и подтвердил, что полученный идентификатор является соответствующим SongId. Очень неприятно видеть значение, но не найти способа передать его в форму" ViewDetails".
Любое руководство или указания, которые могут быть предложены, будут действительно оценены. Т
Sinisa Hajnal
Как вы связываете другие свойства? т. е. если вы используете Item.BandName, то же самое должно работать и для Item.Id обратите внимание, что это означает, что ваше поле Id содержит songId, а не bandId или какое-либо другое значение Id.
Я не уверен, что понимаю проблему. Это из-за того, что Id не записывается в параметр SongId или что ваш DetailsView не может видеть/анализировать этот параметр?
Tipton Tyler
Спасибо за Ваш быстрый ответ. Я не думаю,что проблема в привязке. Я могу создать маркированный список, в котором перечислены названия песен, используя:
DataSource = '<%# Eval ("Songs") % & gt;' DataTextField= " Title"
и маркированный список, в котором указан соответствующий идентификатор песни с помощью:
Источник данных = в '<%# Ивала("песни") %&ГТ;' DataValueField="идентификатор"
NB[каким-то образом часть кода для форм "Songs and Bands" была удалена из вопроса и выглядит так:
&ЛТ;АСП:контента ID="Content2" атрибутом ContentPlaceHolderID="cpMainContent" атрибут runat="сервер"и GT;
<asp:EntityDataSource ID= "EntityDataSource1" runat= "сервер">
<asp: Repeater ID= "Repeater1" runat= "server" >
Я считаю, что моя проблема заключается в структуре; я не знаю, как захватить идентификатор песни и вставить его в гиперссылку в маркированном списке.