我在未触发事件的jQuery
对话框中有一个 asp:Button 。OnClick
我正在使用该PostBackUrl
属性导航到另一个页面,但我想在事件中设置此属性,OnClick
以便我可以根据他们在对话框中上传的文件的名称附加查询字符串变量。我之前发布了一个关于此对话框的问题,因为我根本无法将其发回,但这已得到修复。单击按钮回发很好,我可以PostBackUrl
在 asp 标记中设置属性,或者在Page_Load()
后面的代码中设置属性。但是由于某种原因我无法触发该OnClick
功能,这就是我要设置PostBackUrl
. 这是.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>
...显示对话框并将其放置在表单中的 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;
}
}
编辑:好的,这是对话框中的提交按钮实际呈现为 HTML 的方式。我认为这可能是问题所在。如您所见,javascript onclick 只是提供“Profile.aspx”作为回发网址,尽管在我看来任何服务器端代码都应该首先执行。这是表格内...
<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 %>, '')
不起作用。