Jag börjar bli riktigt irriterad på det här, kan inte fatta vad som går fel. Nu triggas oncommand, jag behövde bara sätta AutoEventWireup till true. Hur menar du? Lyckades äntligen lösa det efter 2 dagars slit.OnCommand triggas inte.
<code>
<asp:Button
ID="HRight"
text="#>"
OnCommand="ChangeHPos"
CommandName="3"
CommandArgument=<%# Convert.ToInt32(DataBinder.Eval(Container.DataItem, "BlockID")) %>
runat="server"
/></code>
och i code-behind:
<code> public void ChangeHPos(object s, CommandEventArgs e)
{
Response.Write("teststring"); // Skrivs inte ut, har även testat skicka felaktiga SQL-strängar som åtminstone borde ge ett felmeddelande men, nada.
}</code>
Knappen HRight ligger i en <asp:repeater> som ligger i en UpdatePanel.
Mera exakt så är det jag försöker göra att göra en del ändringar i databasen och sedan ladda om innehåller i repeatern. (Jag ersatte den koden med en response.write dock för att hålla det simpelt)
Det som händer (förutom att ChangeHPos ignoreras) är att repeatern töms på innehåll. Borde inte innehåller sparas vid en postback?
Min onload ser ut såhär:
<code> protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
UpdateContentDisplay(); //Sätter in datan i repeatern.
}</code>Sv: OnCommand triggas inte.
Dock har ett nytt problem dykt upp, på ungefär samma ställe i koden som knappen har jag en hemmagjord usercontrol:
<code> <sima:MainBlock
ID="Block"
BlockID=<%# Convert.ToInt32(DataBinder.Eval(Container.DataItem, "BlockID")) %>
runat="server"
/></code>
När sidan laddas första gången fungerar den fint men vid postback kör usercontrolen page_load innan den läst in BlockID attributet.Sv: OnCommand triggas inte.
Jag har i min usercontrol koden:
<code>public partial class MainBlock : System.Web.UI.UserControl
{
public int i_BlockID;
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("page_load[" + i_BlockID + "]"); //For debugging, this returns the correct value the first time but wrong value after postback.
}
public int BlockID
{
get { return i_BlockID; }
set {
i_BlockID = value;
Response.Write("set[" + i_BlockID + "]"); // Always returns the correct value, even after postback.
}
}
}</code>
Fick även tipset att använda den här koden men samma fel fortfarande
<code>public partial class MainBlock : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("page_load[" + BlockID + "]"); //For debugging, this returns the correct value the first time but wrong value after postback, like before.
}
public int BlockID
{
get
{
object o = this.ViewState["BlockID"];
return (o == null) ? 0 : (int)o;
}
set
{
this.ViewState["BlockID"] = value;
}
}
}</code>Sv:OnCommand triggas inte.
Problemet var att controllens page_load kördes innan attributen var satta. Lösningen blev att sätta page_load koden i en egen metod som jag sedan kallar på OnItemDataBound.