webForumDet fria alternativet

Måste dubbelklicka på linkbuttons i en ListView omsluten av en updatepanel

.NET

3 svar · 844 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Frågan#1

Hej,

har ett mystiskt problem som jag inte får någon ordning på.
Jag har en listview i en updatepanel, listviewen fylls med knappar, dessa har en onclick, men för att innehållet ska köras i funktionen för onclick så måste jag klicka 2 ggr på knappen.

ASCX-filen:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="MyForm.WebUserControl1" %>
<asp:ScriptManager ID="smTest" runat="server" EnablePartialRendering="true"  />
<asp:Panel ID="pnlOne" runat="server">
	<asp:LinkButton ID="btnPopulate" runat="server" onclick="btnPopulate_Click" Text="Populate"></asp:LinkButton>
	<asp:UpdatePanel ID="upPnl" runat="server" UpdateMode="Conditional">
		<ContentTemplate>
			<asp:ListView ID="gridOne" runat="server">
				<LayoutTemplate>
					<ul>
						<li runat="server" id="itemPlaceholder"></li>
					</ul>
				</LayoutTemplate>
				<ItemTemplate>
					<li id="Li1" runat="server"><asp:LinkButton ID="LinkButton1" CommandArgument='<%# Eval("Name") %>' runat="server" Text='<%#Eval("Text") %>' OnClick="lbt1_Click" /> <%# Eval("Text") %></li>
				</ItemTemplate>
			</asp:ListView>
		</ContentTemplate>
		<Triggers>
			<asp:AsyncPostBackTrigger ControlID="btnPopulate" EventName="Click" />
		</Triggers>
	</asp:UpdatePanel>
</asp:Panel>
<asp:Panel ID="pnlTwo" runat="server" Visible="false">
	<asp:Literal ID="litResult" runat="server"></asp:Literal>
</asp:Panel>

CS filen

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MyForm
{
	public partial class WebUserControl1 : System.Web.UI.UserControl
	{
		protected void Page_Load(object sender, EventArgs e)
		{

		}
		protected void btnPopulate_Click(object sender, EventArgs e)
		{
			List<MyItem> itmColl = new List<MyItem>();
			itmColl.Add(new MyItem() { Name = "123", Text = "Item 1" });
			itmColl.Add(new MyItem() { Name = "456", Text = "Item 2" });
			itmColl.Add(new MyItem() { Name = "789", Text = "Item 3" });
			itmColl.Add(new MyItem() { Name = "abc", Text = "Item 4" });
			itmColl.Add(new MyItem() { Name = "def", Text = "Item 5" });
			gridOne.DataSource = itmColl;
			gridOne.DataBind();
		}
		protected void lbt1_Click(object sender, EventArgs e)
		{
			litResult.Text = ((LinkButton)sender).CommandArgument;
			pnlOne.Visible = false;
			pnlTwo.Visible = true;
		}
	}
	public class MyItem
	{
		public string Name { get; set; }
		public string Text { get; set; }
	}
}

Någon som har nån idé om hur jag slipper dubbelklicka på knapparna i min ListView?

Medlem sedan dec. 201027 inlägg
#2

Jag vet inte om detta löser problemet men jag brukar använda itemcommand när jag jobbar med repeaters..

Tex:

<asp:ListView runat="server" ID="lvTest">
    <ItemTemplate>
        <asp:LinkButton runat="server" CommandName="populate" CommandArgument='<%# Eval("xxx") %>' />
    </ItemTemplate>
</asp:ListView>
        protected void Page_Load(object sender, EventArgs e)
        {
            lvTest.ItemCommand += new EventHandler<ListViewCommandEventArgs>(lvTest_ItemCommand);
        }

        void lvTest_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "populate")
            {
                var xxx = e.CommandArgument;
            }
        }
Medlem sedan jan. 20013 341 inlägg
#3

Har testat det med, men det gör ingen skillnad :(

Medlem sedan dec. 201027 inlägg
#4

Blir det samma knas om du binder listan på oninit istället för på clickeventet?

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)