asp:Button im Dialogfeld jQuery OnClick-Ereignis nicht auslösen.
Ich habe ein asp:Button in ein jQuery
dialog, für die die OnClick
event nicht feuern. Ich bin mit der PostBackUrl
- Eigenschaft, um navigieren zu einer anderen Seite, aber ich will set diese Eigenschaft in der OnClick
Ereignis, so dass ich fügen Sie eine query-string-variable nach dem Namen einer Datei, die Sie hochladen, in den dialog. Ich habe eine Frage zu diesem dialog erwähnt, weil ich konnte es nicht posten zurück, aber das ist behoben worden. Ein Klick auf die Schaltfläche Bucht wieder in Ordnung, und ich kann die PostBackUrl
Eigenschaft in der asp-Markierung oder in der Page_Load()
von der code-behind. Aber ich nicht Holen Sie sich die OnClick
- Funktion, um das Feuer für einige Grund, und das ist, wo ich festlegen möchten die PostBackUrl
. Hier ist die .aspx...
<form id="frmDialog" runat="server">
<asp:Button ID="btnDisplayDialog" runat="server" Text="Click to Display Login Dialog" OnClientClick="showDialog(); return false;" />
<div class="divInnerForm"></div>
<div class="divDialog" style="display: none">
<table style="width: 100%;">
<tr>
<td>First Name: <asp:TextBox ID="txtFirstName" runat="server" Text=""></asp:TextBox></td>
<td>Last Name: <asp:TextBox ID="txtLastName" runat="server" Text=""></asp:TextBox></td>
</tr>
<tr>
<td>
How Old are You?
<asp:DropDownList ID="ddlAge" runat="server">
<asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="2">2</asp:ListItem>
<asp:ListItem Value="3">3</asp:ListItem>
</asp:DropDownList>
</td>
<td>
How Many Siblings do You Have?
<asp:DropDownList ID="ddlNumberSiblings" runat="server">
<asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="2">2</asp:ListItem>
<asp:ListItem Value="3">3</asp:ListItem>
<asp:ListItem Value="4">4</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td>
What is your birthday?
<input type="text" id="datepicker" name="datepicker" />
</td>
</tr>
<tr>
<td>
Please Choose a Picture to Upload:
<asp:FileUpload ID="fupUserPicture" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnUserPicture_Click" />
</td>
</tr>
</table>
</div>
</form>
...das jQuery-Skript, das zeigt den dialog und legt es in die form...
function showDialog() {
$('.divDialog').dialog({
modal: true, show: 'slide', width: 500,
open: function (event, ui) {
$('.divInnerForm').append($(this).parent());
}
});
}
...und den code hinterher mit OnClick-Funktion....
protected void btnUserPicture_Click(object sender, EventArgs e)
{
string fileName = "";
if (fupUserPicture.HasFile)
{
try
{
fileName = Path.GetFileName(fupUserPicture.FileName);
fupUserPicture.SaveAs(Server.MapPath("~/Images/" + fileName));
}
catch (Exception ex)
{
}
btnSubmit.PostBackUrl = "~/Profile.aspx?pic=" + fileName;
}
}
EDIT: Ok, hier ist, wie der submit-button in dem dialog tatsächlich gerendert als HTML. Ich denke, das könnte das problem sein. Wie Sie sehen können, wird die javascript-onclick-stellt einfach "Profil.aspx" als post-url zurück, obwohl es mir scheint, jede server-Seite code, der ausgeführt werden soll in Erster Linie. Dies ist in der form...
<input id="btnSubmit" type="submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSubmit", "", false, "", "Profile.aspx", false, false))" value="Submit" name="btnSubmit">
..und hier ist, wie es renderes wenn ich entfernen btnSubmit.PostBackUrl = "~/Profile.aspx"
von der Page_Load()
- Funktion....
<input id="btnSubmit" type="submit" value="Submit" name="btnSubmit">
EDIT 2: ok also ich habe einer weitere versteckte asp-button außerhalb des dialogs, und die Schaltfläche in das Dialogfeld jetzt ruft eine javascript-Funktion auslöst, die OnClick
Ereignis des verborgenen Knopf. Gleiche Sache, die javascript-Funktion läuft gut, aber btnHidden_Click()
Funktion does not run!
ich bin bei einem Totalverlust ich an diesem Punkt haben buchstäblich keine Ahnung, warum das nicht funktioniert. Hier ist die neue Versteckte Schaltfläche, die außerhalb des dialog-div, aber in der form wie man sehen kann....
</div>
<asp:Button ID="btnHidden" runat="server" Text="" Visible="false" ClientIDMode="Predictable" OnClick="btnHidden_Click"/>
</form>
...hier ist die Schaltfläche in das Dialogfeld mit dem OnClientClick-Ereignis, was wie ich schon sagte, läuft wunderbar...
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="forcebtnHiddenClick(); return false;" />
Ist hier der OnClick-Funktion in der code-behind für btnHidden, obwohl es genau das gleiche wie vorher...
protected void btnHidden_Click(object sender, EventArgs e)
{
string fileName = "";
if (fupUserPicture.HasFile)
{
try
{
fileName = Path.GetFileName(fupUserPicture.FileName);
fupUserPicture.SaveAs(Server.MapPath("~/Images/" + fileName));
}
catch (Exception ex)
{
}
Response.Redirect("~/Profile.aspx?pic=" + fileName);
}
}
...und die javascript-Funktion, die läuft, aber aus irgendeinem Grund nicht Folge btnHidden_Click läuft...
function forcebtnHiddenClick(e) {
//__doPostBack('btnHidden', 'OnClick');
$('#btnHidden').trigger('click');
}
..wie du sehen kannst, habe ich beides ausprobiert .trigger('click') und __doPostBack(), beide ohne Erfolg.
EDIT: Ok, also das problem ist definitiv die
function forcebtnHiddenClick() {
__doPostBack('btnHidden', '');
}
Funktion, die eigentlich nicht auslösen die btnHidden_Click
Veranstaltung. Wenn ich btnHidden
sichtbar und klicken Sie es direkt, die btnHidden_Click
- Funktion läuft einwandfrei.
EDIT: Nach TONNEN zu suchen, fand dieses und bekam es zu arbeiten...
function forcebtnHiddenClick() {
<%= ClientScript.GetPostBackEventReference(btnHidden, string.Empty) %>;
}
Ich weiß nicht, warum
__doPostBack(<%= btnHidden.ClientID %>, '')
nicht funktioniert.
- was ist die Anweisung $('.divInnerForm').append($(this).parent()); versucht, chaeiev? versuchen Sie, kommentieren Sie es aus..
- Ich verstehe nicht, wenn Sie sagen, die Taste post Rücken gut, aber das onclick nicht Feuer.Sie die beim klicken-Ereignis generieren, die ein postback.Sind Sie sagen, wenn die Seite geht durch ein postback ,den button-event-handler wird nicht getroffen wird, wenn Sie einen break-Punkt auf?
- ohne das script jQuery bewegt sich der dialog außerhalb der form, wenn die Seite gerendert wird
- Wenn ich die PostBackUrl-Eigenschaft auf die Schaltfläche post zurück an die url ich ihn an. Jedoch, die Einstellung, die das OnClick-Ereignis wird nicht in das Ereignis auslösen. Also, wenn ich PostBackUrl innerhalb des Ereignis-Funktion, sagen btn_Click, es wird einfach auf die gleiche Seite zurück. Aber wenn ich PostBackUrl in der Funktion Page_Load, oder in der asp-markup auf die Schaltfläche post zurück zu der beabsichtigten Seite. Also das OnClick-event einfach nicht Feuer.
- Ja, dass ist es, was ich sage, tut mir Leid.
- versuchen Sie $(this).parent().appendTo('form') und mir sagen, ob es funktioniert
- Die "ClientScript.GetPostBackEventReference" code erzeugen soll, die javascript-code aufrufen, __doPostBack(). Es ist tatsächlich besser zu bedienen ist, b/c es wird geben Sie, was Funktion ASP.Net für die PostBack - (falls Sie keine änderungen vornehmen). Wenn Sie den Quellcode anschauen, sehen Sie die javascript erstellt. Vergleichen Sie den code, den Sie schrieb zu nennen "__doPostBack" manuell, um zu sehen, warum es vielleicht nicht geklappt haben. In deinem letzten code-Beispiel, Sie haben nicht die Anführungszeichen um die Schaltfläche ClientID - ich weiß nicht, ob das ist, was Ihr code eigentlich war, aber wenn es so ist, das könnte schon das problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese
Sollten Sie Anhängen divDialog, um die form nicht, die leere divInnerForm.Dann wird Ihr button wird in der form und seinen click-Ereignis ausgelöst wird, gerne.
Update
Versuchen auch mit onclient klicken.Dann verdrahten Sie dieses Attribut für eine Funktion wird die Kraft von einem post zurück, auf den verborgenen Knopf.
Dann verwenden Sie die event-handler hidButton_Click, um Ihre code.
sollte funktionieren.. hängen Sie an das Formular, um Feuer-server-side-events
Wenn ich die jQuery dialog, ich benutze immer die Tasten, die kommen als Teil des dialogs. Dann, wenn Sie angeklickt werden, rufe ich eine javascript-Funktion ausführen, mein handeln.
Wenn ich behandeln muss einen PostBack aus, die Tasten, dann erstelle ich eine separate ASP.Net button auf der Seite - dies ist die Taste, die ich nutzen, um mit meinen OnClick-Ereignis. Der Benutzer wird nicht klicken Sie auf diese ASP.Net -Taste, wenn (ich verstecken mit css-es ist also nicht auf der Seite sichtbar). Stattdessen wird die javascript-Funktion, die ich nenne, wenn Sie klicken Sie auf die Schaltfläche Dialogfeld wird code aufrufen, wird imitieren einen Klick auf meine ASP.Net -Taste.
Das Ergebnis ist, dass, wenn der dialog-Schaltfläche geklickt wird, wird die Seite ein PostBack, als ob die ASP.Net Schaltfläche, auf die geklickt wurde, und ich kann es über meine OnClick-Ereignis.
Hier einige Beispiel-code (in VB.Net)...
Wenn die Seite aufgebaut ist, es wird auch die handleSubmitMyButton() javascript-Funktion. Die dialog-Schaltfläche klicken, wird diese Funktion aufrufen, werden die trigger der PostBack, als ob die 'MyButton' - Schaltfläche geklickt wurde.
In der Regel habe ich nicht zu verstecken ASP.Net button mit css. Oft sind es die Schaltfläche wird angeklickt, um den dialog zu öffnen. Ich verhindern, dass der Postbacks, wenn es öffnet sich der dialog; dann, wenn der dialog-Schaltfläche geklickt wird, ich imitieren klicken auf die Schaltfläche.
UPDATE:
Ich sah mehrere Leute erwähnen, die folgende Zeile von code
Dachte ich, das ist es, was Sie versuchten zu tun mit deiner code-Zeile:
Wenn das nicht das gleiche tun, obwohl, müssen Sie den code zum hinzufügen der Felder in das Formular.
Ich den modalen dialog, und ich brauche, um eine Zeile hinzuzufügen, sonst bekomme ich den modalen Transparenz über die Schaltfläche schließen!
Können Sie auch Gebrauch machen von einem LinkButton stattdessen das OnClick bewirkt, dass ein postback mit diesem einen, keine Notwendigkeit zu passen Sie alle jquery dann.