页:
<body>
<form id="frmLogin" runat="server">
<asp:Button ID="btnClick" OnClientClick="openConfirmDialog();" OnClick="PopulateLabel" runat="server"/>
<div id="divDialog"></div>
<asp:Label ID="lblText" runat="server"></asp:Label>
</form>
</body>
JS
<script type="text/javascript">
$(document).ready(function() {
$("#divDialog").dialog({autoOpen: false,
buttons: { "Ok": function()
{
$(this).dialog("close");
},
"Cancel": function()
{
$(this).dialog("close");
}
}
});
});
function openConfirmDialog()
{
$("#divDialog").dialog("open");
}
C#
protected void Page_Load(object sender, EventArgs e)
{
lblText.Text = "";
}
protected void PopulateLabel(object sender, EventArgs e)
{
lblText.Text = "Hello";
}
此代码打开一个带有“确定”和“取消”按钮的对话框,但它不会等待用户活动并立即发布页面并填充标签。我需要根据用户活动调用c#函数。如果用户单击“确定”标签应填充,如果用户单击“取消”,则不应调用c#函数。我如何实现这一目标?
答案 0 :(得分:3)
首先,为防止页面立即回发到服务器,您需要通过从处理程序返回click
来取消false
事件的默认行为:
<asp:Button ID="btnClick" runat="server" OnClick="PopulateLabel"
OnClientClick="openConfirmDialog(); return false;" />
接下来,您需要在点击Ok
按钮时自行执行回发:
$("#divDialog").dialog({
autoOpen: false,
buttons: {
"Ok": function() {
$(this).dialog("close");
__doPostBack("btnClick", "");
},
"Cancel": function() {
$(this).dialog("close");
}
}
});
请注意,__doPostBack()
的第一个参数是控件的 name (ASP.NET术语中的UniqueID
)。由于该按钮是<form>
元素的直接子元素,因此我们可以在id
调用中对其__doPostBack()
进行硬编码,但如果它位于容器层次结构中,则会变得更复杂。在这种情况下,您可以使用ClientScript.GetPostBackEventReference()生成对__doPostBack()
的适当调用。
编辑:由于您的网页不包含任何启用回发的控件,因此不会在客户端定义__doPostBack()
。要解决该问题,您可以使用LinkButton控件而不是Button控件。
答案 1 :(得分:0)
添加了另一个按钮,并使用jQuery click()事件触发新按钮的click事件,该事件将依次触发C#中的相应事件处理程序