Получить значения Label - LinkButton - сессия
Я добавил кнопку "Мне нравится" в свой список товаров, и кнопка "Мне нравится" предполагает, что нужно получить значение заголовка объявления, а также Adsid и идентификатор пользователя, который щелкнул по этой ссылке, например, btn, а затем код должен сохранить это добавление в избранной таблице, как упомянуто в код, но у меня есть проблема, так как я все еще большой в C#, и я не знаю, как это исправить очень хорошо, не могли бы вы помочь с этим (исправить код ниже, потому что я получаю сообщение об ошибке:
"Ошибка 3 Имя Adstitlinkbtn не существует в текущем контексте
Ошибка 2 Имя "Labeladsid" не существует в текущем контексте "
и также я буду благодарен, если вы добавите пользователю сообщение, что в случае, если он не вошел в систему и не нажмет на likebtn, получит сообщение "Пожалуйста, войдите, чтобы добавить эту рекламу в ваш список избранного".
Вы можете найти эту запись экрана, которая может объяснить, что я имею в виду
Большое спасибо всем вам
protected void likebtn_Click(object sender, ImageClickEventArgs e)
{
SqlConnection likecn = new SqlConnection(cs);
SqlCommand likecmd = new SqlCommand();
string sqlstatment = "INSERT INTO favourite (AdsID, UID, AdsTit) VALUES (@AdsID,@UID,@AdsTit)";
likecmd.Connection = likecn;
likecmd.CommandType = CommandType.Text;
likecmd.CommandText = sqlstatment;
//Insert the parameters first
likecmd.Parameters.AddWithValue("@AdsID", Labeladsid);
likecmd.Parameters.AddWithValue("@UID", Session["UsrNme"]);
likecmd.Parameters.AddWithValue("@AdsTit", Adstitlinkbtn.Text);
SqlDataAdapter ad = new SqlDataAdapter(likecmd);
DataSet ds = new DataSet();
ad.SelectCommand = likecmd;
ad.Fill(ds);
Response.Write("This Ads has been added to your Fovarite List");
}
<asp:ListView ID="adsshow" runat="server" DataSourceID="locationdatalistshow"
style="text-align: left" >
<ItemTemplate>
<div class="templist">
<asp:Label ID="Labeladsid" runat="server" Text='<%# Eval("AdsID") %>' style="color: #ffffff"></asp:Label>
<asp:ImageButton ID="ImageButton3" runat="server" Height="88px" Width="91px"
CssClass="imag1" ImageUrl='<%# "/images/AdsImgs/" + Eval("Img1") %>'
PostBackUrl='<%# "AdsDetails.aspx?Img1=" + Eval("AdsID") %>' />
<asp:LinkButton ID="Adstitlinkbtn" runat="server"
style="font-weight: 700; color: #0066FF" Text='<%# Eval("AdsTit") %>'
CssClass="adstit" onclick="Adstitlinkbtn_Click"
PostBackUrl='<%# "AdsDetails.aspx?AdsTit=" + Eval("AdsID") %>' ></asp:LinkButton>
<br />
<asp:Label ID="AdsDescLabel" runat="server" Text='<%# Eval("AdsDesc") %>'
CssClass="adsdisc" />
<br /><br />
<br /><br />
<asp:Label ID="CountryLabel" runat="server" Text='<%# Eval("Country") %>'
style="font-family: Arial, Helvetica, sans-serif; font-size: small" />
-
<asp:Label ID="StateLabel" runat="server" Text='<%# Eval("State") %>'
style="font-family: Arial, Helvetica, sans-serif; font-size: small" />
-
<asp:Label ID="CityLabel" runat="server" Text='<%# Eval("City") %>'
style="font-size: small; font-family: Arial, Helvetica, sans-serif" />
<div class="adsprice">Price:
<asp:Label ID="AdsPriceLabel" runat="server" style="color: #FF0000"
Text='<%# Eval("AdsPrice") %>' /></div>
<br />
<div class="iconadsbox">
<asp:ImageButton ID="likebtn" runat="server"
ImageUrl="~/iconsimg/favoritestar2.png" OnClick="likebtn_Click" CommandName="like" />
<asp:ImageButton ID="Sndmailtoadder" runat="server"
ImageUrl="~/iconsimg/mailposter.png" OnClick="Sndmailtoadder_Click" />
</div>
<asp:Image ID="Image1" runat="server" CssClass="divideline"/>
</div>
</ItemTemplate>
<LayoutTemplate>
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
<asp:DataPager ID="DataPager1" runat="server" PagedControlID="adsshow" PageSize="7">
<Fields>
<asp:NumericPagerField />
<asp:NextPreviousPagerField />
</Fields>
</asp:DataPager>
<br />
</div>
</LayoutTemplate>
</asp:ListView>
2 ответа
Создайте значение bool, чтобы указать, вошел ли пользователь в систему или нет (назовите его bool loggedIn). Где бы ни находился ваш код для входа (вы не публиковали этот код), установите для этого bool значение true. Затем, когда пользователь нажимает кнопку "Like", в вашем методе "likebtn_Click" проверьте bool:
if(!loggedIn)
{
MessageBox.Show("Please login to add this ads to your favorite list");
return;
}
Я верю, что вы не показали нам всю свою разметку. Похоже, вы находитесь внутри вида сетки или другого элемента управления коллекцией. В этих элементах управления макет шаблона динамически генерируется для каждого элемента. Таким образом, элементы управления ярлыком и кнопкой ссылки на самом деле не существуют. Что вам нужно сделать, это создать событие GridView_Command, и в этом коде у вас будет доступ к элементам управления в этом элементе.
Таким образом, в основном вы создали элемент шаблона, и эти элементы управления генерируются динамически во время выполнения, поэтому они недоступны во время разработки. Если вы разместите оставшуюся часть своей отметки, я или любой другой, кто захочет, может оказать вам более конкретную помощь.
protected void adsshow_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName == "like")
{
var lblAds = e.Item.FindControl("Labeladsid") as Label;
var lbtn = e.Item.FindControl("Adstitlinkbtn") as LinkButton;
var id = lblAds.Text;
var title = lbtn.Text;
}
}
<asp:ListView ID="adsshow" runat="server" DataSourceID="locationdatalistshow"
style="text-align: left" onitemcommand="adsshow_ItemCommand" >
<ItemTemplate>
...
<asp:ImageButton ID="likebtn" runat="server"
ImageUrl="~/iconsimg/favoritestar2.png" CommandName="like" />
...
Заметил, что я добавил событие OnCommand в ListView и удалил ваше событие OnClick из кнопки image. Я не уверен на 100% в удалении события OnClick, поэтому, если вы можете подтвердить для меня, что событие OnCommand происходит правильно с удалением OnClick из ImageButton.