イベントが発生していないjQuery
ダイアログ内に asp:Button があります。OnClick
プロパティを使用して別のページに移動していますが、ダイアログでアップロードするファイルの名前に従ってクエリ文字列変数を追加できるように、イベントでこのプロパティを設定PostBackUrl
したいと考えています。以前、このダイアログについて質問を投稿しました。ポストバックをまったく取得できなかったためです。しかし、それは修正されました。ボタンをクリックすると問題なくポスト バックされ、asp マークアップまたはコード ビハインドでプロパティを設定できます。しかし、何らかの理由で関数を起動できません。これが.aspxです...OnClick
PostBackUrl
Page_Load()
OnClick
PostBackUrl
<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>
...ダイアログを表示してフォーム内に配置するjQueryスクリプト...
function showDialog() {
$('.divDialog').dialog({
modal: true, show: 'slide', width: 500,
open: function (event, ui) {
$('.divInnerForm').append($(this).parent());
}
});
}
...そして、OnClick 関数の背後にあるコード....
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;
}
}
編集: OK、ダイアログの送信ボタンが実際に HTML としてレンダリングされる方法を次に示します。これが問題かもしれないと思います。ご覧のように、javascript onclick は単に "Profile.aspx" をポスト バック URL として提供しますが、サーバー側のコードはすべて最初に実行する必要があるように思えます。これはフォーム内にあります...
<input id="btnSubmit" type="submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSubmit", "", false, "", "Profile.aspx", false, false))" value="Submit" name="btnSubmit">
btnSubmit.PostBackUrl = "~/Profile.aspx"
..そして、関数から削除した場合のレンダリング方法は次のとおりですPage_Load()
....
<input id="btnSubmit" type="submit" value="Submit" name="btnSubmit">
編集 2: わかりましたので、ダイアログの外側に別の非表示の asp ボタンを追加しました。ダイアログ内のボタンOnClick
は、非表示のボタンのイベントをトリガーする JavaScript 関数を呼び出します。同じこと、javascript 関数は正常に動作しますが、btnHidden_Click()
関数does not run!
は完全に途方に暮れています。この時点で、これが機能しない理由が文字通りわかりません。これは新しい隠しボタンで、ダイアログ div の外側ですが、ご覧のとおりフォームの内側にあります....
</div>
<asp:Button ID="btnHidden" runat="server" Text="" Visible="false" ClientIDMode="Predictable" OnClick="btnHidden_Click"/>
</form>
...これは、OnClientClick イベントを含むダイアログ内のボタンです。これは、私が言ったように正常に実行されます...
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="forcebtnHiddenClick(); return false;" />
そして、これは btnHidden のコード ビハインドの OnClick 関数ですが、以前とまったく同じです...
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);
}
}
...そして実行するjavascript関数ですが、何らかの理由でbtnHidden_Clickが実行されません...
function forcebtnHiddenClick(e) {
//__doPostBack('btnHidden', 'OnClick');
$('#btnHidden').trigger('click');
}
..ご覧のとおり、.trigger('click') と __doPostBack() の両方を試しましたが、どちらも役に立ちませんでした。
編集:わかりましたので、問題は間違いなく
function forcebtnHiddenClick() {
__doPostBack('btnHidden', '');
}
実際にはbtnHidden_Click
イベントをトリガーしていません。btnHidden
表示して直接クリックすると、関数は正常にbtnHidden_Click
動作します。
編集:大量の検索の後、これを見つけて動作させました...
function forcebtnHiddenClick() {
<%= ClientScript.GetPostBackEventReference(btnHidden, string.Empty) %>;
}
どうしてか分かりません
__doPostBack(<%= btnHidden.ClientID %>, '')
動作しません。