#c# #html #listview #button #visual-studio-2017
#c# #HTML #listview #кнопка #visual-studio-2017
Вопрос:
Я изо всех сил пытался заставить это работать, у меня есть ListView, в котором есть 2 кнопки, которые в основном являются «Принять» и «Отклонить» изображение, эти кнопки генерируются самим Listview, поэтому я не могу назначить идентификатор. Я не могу использовать commandargument, потому что это кнопки html, я также не могу использовать linkbutton, потому что они отправляют обратную отправку, вызывающую обновление страницы, не могу использовать кнопки Asp, потому что внутри них есть значок FA (я знаю, что могу загрузить библиотеку, но я не уверен в этом), поэтому вопрос в том, как я могу сделать так, чтобы при нажатии на одну кнопку другая окрашивалась в серый цвет, и когда я нажимаю на последнюю кнопку, я просматриваю listview и извлекаю все «Принятые» изображения?
Код просмотра списка:
<asp:ListView ID="listadoImg" runat="server" Visible="true" OnItemDataBound="listadoImg_DataBound" >
<ItemTemplate>
<div class="col-12 col-md-6">
<div class="card">
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("imagen") %>' CssClass="card-img-top" />
<div class="card-body">
<div class="row">
<div class="col-7 text-right ">
<asp:Label ID="Label13" Text='<%# string.Concat("SKU: ",Eval("sku"))%>' runat="server"
CssClass="" Font-Size="Small" /><br />
<asp:Label ID="Label17" Font-Size="Small" Text='<%# Eval("marca").ToString() " " Eval("descripcion").ToString()%>' runat="server" CssClass="labelImagenes" /><br />
<asp:Label ID="Label15" Font-Size="Small" Text='<%# string.Concat("Precio Normal: ",Eval("precioNormal"))%>'
runat="server" CssClass="labelImagenes" /><br />
<asp:Label ID="lblPrecioOferta" Font-Size="Small" Text='<%# string.Concat("Precio Oferta: ",Eval("precioPublicacion"))%>'
runat="server" CssClass="labelImagenes" />
</div>
<%--<div class="col-5 text-left mt-3">
<p><i class="fa fa-check fa-2x ico-verde"></i>amp;nbsp; <span>Aprobar </span></p>
<p><i class="fa fa-ban fa-2x mt-1 ico-rojo"></i>amp;nbsp; <span>Rechazar </span></p>
</div>--%>
<div class="col-5 text-left mt-3">
<button type="button" id="btnAceptado1" class="btn btn-light" style="position: relative; display: inline-block; left: 5%; font-size: 18px; top: 3%; padding: 0px; background-color: transparent; margin-top: -10px; border: 1px solid transparent"
aria-label="Left Align" onclick="CambiarAceptado1()" >
<i class="fa fa-check fa-2x ico-verde"></i>
<span>Aprobar </span>
</button>
<button type="button" id="btnAceptado2" class="btn btn-light" style="position: relative; display: none; left: 5%; font-size: 18px; top: 3%; padding: 0px; background-color: transparent; margin-top: -10px; border: 1px solid transparent"
aria-label="Left Align" onclick="CambiarAceptado2()" >
<i class="fa fa-check fa-2x ico-plomo"></i>
<span>Aprobar </span>
</button>
amp;nbsp; amp;nbsp; amp;nbsp; amp;nbsp; amp;nbsp;
<br />
<button type="button" id="btnRechazado1" class="btn btn-light" style="position: relative; display: inline-block; left: 5%; top: 3%; padding: 0px; font-size: 18px; background-color: transparent; border: 1px solid transparent"
aria-label="Left Align" onclick="CambiarRechazado1()">
<i class="fa fa-ban fa-2x mt-1 ico-rojo"></i>
Rechazar
</button>
<button id="btnRechazado2" type="button" class="btn btn-light" style="position: relative; display: none; left: 5%; top: 3%; padding: 0px; font-size: 18px; background-color: transparent; border: 1px solid transparent"
aria-label="Left Align" onclick="CambiarRechazado2()" >
<i class="fa fa-ban fa-2x mt-1 ico-plomo"></i>
Rechazar
</button>
</div>
</div>
</div>
</div>
</div>
</ItemTemplate>
</asp:ListView>
До сих пор мне удавалось создать что-то похожее на одну строку, из-за чего она исчезает, когда остается пустой, вот так:
protected void listadoImg_DataBound(object sender, ListViewItemEventArgs e)
{
Label lblPrecioOfe;
if (e.Item.ItemType == ListViewItemType.DataItem)
{
lblPrecioOfe = (Label)e.Item.FindControl("lblPrecioOferta");
System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
string precioPub = rowView["precioPublicacion"].ToString();
if (precioPub == "")
{
lblPrecioOfe.Text = "";
}
}
}
Изображения выглядят следующим образом:
в настоящее время я могу заставить его работать с JavaScript, который в данный момент используется в кнопках, но только для первого объекта в списке.
Используемый JS -это:
function CambiarAceptado1() {
document.getElementById('btnAceptado1').style.display = 'inline-block';
document.getElementById('btnAceptado2').style.display = 'none';
document.getElementById('btnRechazado1').style.display = 'none';
document.getElementById('btnRechazado2').style.display = 'inline-block';
}
function CambiarAceptado2() {
document.getElementById('btnAceptado1').style.display = 'inline-block';
document.getElementById('btnAceptado2').style.display = 'none';
document.getElementById('btnRechazado1').style.display = 'none';
document.getElementById('btnRechazado2').style.display = 'inline-block';
}
function CambiarRechazado1() {
document.getElementById('btnAceptado1').style.display = 'none';
document.getElementById('btnAceptado2').style.display = 'inline-block';
document.getElementById('btnRechazado1').style.display = 'inline-block';
document.getElementById('btnRechazado2').style.display = 'none';
}
function CambiarRechazado2() {
document.getElementById('btnAceptado1').style.display = 'none';
document.getElementById('btnAceptado2').style.display = 'inline-block';
document.getElementById('btnRechazado1').style.display = 'inline-block';
document.getElementById('btnRechazado2').style.display = 'none';
}
Комментарии:
1. Если вы хотите, чтобы значок внутри asp.net кнопка, вы должны иметь возможность использовать <asp: LinkButton runat=»server» id =»lbHello»><i class=»fa fa-blah»></ i> Привет</asp: LinkButton>, а затем использовать это для вызова обратной отправки. Вы также можете заглянуть в панели обновления, если хотите предотвратить мерцание страницы при обратной передаче.
2. Jquery Ajax с веб-методами страницы — другой вариант
3. Уже решил это, заранее благодарю, я опубликую решение, как только закончу код, ty @Drewskis
Ответ №1:
Хорошо, вот ответ на случай, если у кого-то еще возникнет такая же проблема:
Сначала в привязке к базе данных я определяю 4 html-кнопки, 2 для принятых (вкл. и выкл.) и 2 для отклоненных (одинаковые):
protected void listadoImg_DataBound(object sender, ListViewItemEventArgs e)
{
Label lblPrecioOfe;
if (e.Item.ItemType == ListViewItemType.DataItem)
{
lblPrecioOfe = (Label)e.Item.FindControl("lblPrecioOferta");
System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
string precioPub = rowView["precioPublicacion"].ToString();
if (precioPub == "")
{
lblPrecioOfe.Text = "";
}
}
HtmlButton bot = (HtmlButton)e.Item.FindControl("btnAceptado1");
HtmlButton bot2 = (HtmlButton)e.Item.FindControl("btnAceptado2");
HtmlButton bot3 = (HtmlButton)e.Item.FindControl("btnRechazado1");
HtmlButton bot4 = (HtmlButton)e.Item.FindControl("btnRechazado2");
bot.Attributes.Add("onclick", "CambiarAceptado1(" bot.ClientID.Substring(bot.ClientID.ToString().Length -1) ")");
bot2.Attributes.Add("onclick", "CambiarAceptado2(" bot.ClientID.Substring(bot.ClientID.ToString().Length - 1) ")");
bot3.Attributes.Add("onclick", "CambiarRechazado1(" bot.ClientID.Substring(bot.ClientID.ToString().Length - 1) ")");
bot4.Attributes.Add("onclick", "CambiarRechazado2(" bot.ClientID.Substring(bot.ClientID.ToString().Length - 1) ")");
}
каждый из них отправляет последний символ clientid элемента управления, поэтому в javascript я получаю их, чтобы найти конкретный элемент управления на странице следующим образом :
function CambiarAceptado1(valor) {
document.getElementById('listadoImg_btnAceptado1_' valor ).style.display = 'inline-block';
document.getElementById('listadoImg_btnAceptado2_' valor).style.display = 'none';
document.getElementById('listadoImg_btnRechazado1_' valor).style.display = 'none';
document.getElementById('listadoImg_btnRechazado2_' valor).style.display = 'inline-block';
document.getElementById("listadoImg_hdfAprobacion_" valor).value = "1";
}
также я определяю скрытое поле для хранения значения, если оно принято или отклонено, надеюсь, это будет полезно.