UpdatePanel-wo-Taste-Ereignis nicht ausgelöst
Habe ich ein UpdatePanel mit PlaceHold, die in ihm enthalten. Ich einige Steuerelemente mit Beschriftungen und Schaltflächen wenn die Schaltfläche geklickt wird, löst er ein Ereignis, das löscht Platzhalter und fügt einige Textfelder und ein Button mit einem Event.
Problem ist, wenn Sie auf diese Schaltfläche klicken, erscheint es tun, um ein PostBack und nicht Feuer-Event Zusammenhang mit der-Taste. Ich dachte, dass seit dieser Kontrollen sind alle, die in den UpdatePanel-das wäre kein PostBack, bin ich fehlt der flow.
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<%--<%@ Register assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" namespace="System.Web.DynamicData" tagprefix="cc1" %>
--%>
<div id="content" > <!--start content div-->
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<asp:UpdatePanel ID="upBlog" runat="server" UpdateMode="Conditional">
<ContentTemplate >
<asp:PlaceHolder ID="phBlog" runat="server"></asp:PlaceHolder>
</ContentTemplate>
<Triggers >
<%-- <asp:AsyncPostBackTrigger EventName="Click" ControlID = "btnSave" />--%>
</Triggers>
</asp:UpdatePanel>
<br />
</div> <!--ends content div-->
</asp:Content>
//Code, Der Sich Hinter
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
FirstView();
}
protected void Page_Load(object sender, EventArgs e)
{
}
private void FirstView()
{
FileStream fs = new FileStream(Server.MapPath(GlobalVar.compathver), FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
DataSet dset = new DataSet();
dset.ReadXml(fs);
fs.Close();
//other controls
Button btnComments = new Button();
btnComments.ID = "mybtnComments" + i.ToString();
btnComments.BorderWidth = 0;
btnComments.Text = MyFunc.CountComments(row["ID"].ToString(), dset) + " Comments";
phBlog.Controls.Add(btnComments);
btnComments.CommandArgument = row["ID"].ToString();
btnComments.BorderWidth = 0;
btnComments.Command += new CommandEventHandler(Button1_Click)
}
private void CommentView(string ID) ///THIS DOES not FIRE
{
DataView myCommentView = GetCommentView(ID);
Button btnCommentSave = new Button();
btnCommentSave.ID = "mySavebtnComments" + i.ToString();
btnCommentSave.Text = "Publish";
btnCommentSave.BackColor = Color.Aquamarine;
phBlog.Controls.Add(btnCommentSave);
btnCommentSave.CommandArgument = row["ID"].ToString();
btnCommentSave.Click += new EventHandler(btnSave_Click);
}
protected void Button1_Click(object sender, CommandEventArgs e)
{
CommentView(e.CommandArgument.ToString());
}
protected void btnSave_Click(object sender, EventArgs e)
//protected void btnSave_Click(object sender, CommandEventArgs e)
{
FileStream fsxml = new FileStream(Server.MapPath(GlobalVar.compathver), FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite);
//other code
//XML Document Saved
xmldoc.Save(fsxml);
}
- können Sie ein Beispiel für das markup?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Des UpdatePanel-immer noch ein postback. Die ganze Seite Leben-Zyklus wird wiederholt, wenn die Schaltfläche geklickt wird, und daher der Page_Init und Page_Load zum Beispiel wird erneut ausgeführt. AJAX nicht entfernen, die postbox, nur blendet es aus der client.
Ich kann nicht offensichtlich sehen etwas falsch mit dem code, den du gepostet hast aber ich würde vorschlagen, Sie legen eine Pause, in der Page_Init als ein Anfang. Dies wird in der Lage sein, Ihnen zu sagen, wenn die postback ist eigentlich passiert oder nicht, denn diese wird ausgelöst, wenn der button ist tatsächlich zu versuchen, um das Feuer der Schaltfläche click-Ereignis. Beachten Sie alle click-Ereignisse ausgelöst wird, nachdem die Seite Lebenszyklus abgeschlossen ist (Theoretisch).
Auf den zweiten Blick würde ich vorschlagen, dass Sie die Button-event in der FirstView () - Methode, um ein Klicken Sie dann eher ein Befehl und sehen, ob dies löst das Ereignis aus.
ist es besser, ein Ereignis an das Steuerelement, bevor Sie das Steuerelement hinzufügen, um einen anderen container.
zweitens die Schaltfläche mit dem Namen des Parameters "btnCommentSave" wird nicht funktionieren. Sie müssen vorsichtig sein, auf OnInit, OnLoad-events. Es ist server-client-Seite-Problem. Die Seite gedrängt vom server zum client beinhaltet nicht die "btnCommentSave" - Taste, so dass diese Taste leuchtet bei der Kunden-Seite, aber es funktioniert nicht.
btnComments funktioniert, weil es gerendert vom server, bevor Sie zum client in UpdatePanel-OnLoad-Funktion.
Was gerendert nach dem OnLoad-Funktionen, funktioniert nicht.