我的aspx网页上有一个按钮,应该点击这个按钮'在我的代码背后的c#代码。 OnClientClick方法然后调用JS确认对话框,因此只有当用户点击“确定”时才会执行btn_Click函数...
这是我的代码到目前为止: Variante 1
ASPX:
<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" />
aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
// set OnClientClick
btnConfirm.OnClientClick = "confirm('Save in DB?');";
// invoke method
Type t = typeof(System.Web.UI.WebControls.Button);
object[] p = new object[1];
p[0] = EventArgs.Empty;
MethodInfo m = t.GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(btnConfirm, p);
}
protected void btnConfirm_Click(object sender, EventArgs e)
{
//save something in database
}
获得代码示例:http://forums.asp.net/t/1046550.aspx?How+do+you+raise+a+button+click+event+from+outside+the+button+
我想调用OnClientClick方法,但是当我更换&#39; OnClick&#39;使用&#39; OnClientClick&#39;出现此错误:
System.NullReferenceException未被用户代码处理 Message =对象引用未设置为对象的实例。
编辑: Variante 2:
我试图像这样重写我的程序: ASPX:
<script language="javascript">
function invokeButtonClick() {
document.getElementById("btnConfirm").click();
}
function Validate() {
return confirm('Save in db?');
}
</script>
<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" OnClientClick="return Validate();" />
aspx:cs:
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, GetType(), "InvokeButton", "invokeButtonClick();", true);
}
protected void btnConfirm_Click(object sender, EventArgs e)
{
// save something in database
}
然后在我的btnConfirm_Click函数之前的页面回发被调用...
谢谢,
迈克尔
答案 0 :(得分:7)
如果OnClientClick
的返回值为 true ,则会触发代码隐藏OnClick
事件。如果OnClientClick
返回 false ,则表示不会。
如果OnClientClick
没有返回任何内容,则无论如何都会触发代码隐藏事件。所以你想要......
<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" />
<script language="javascript">
function Validate() {
return confirm('Save in db?');
}
</script>
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
// set OnClientClick
btnConfirm.OnClientClick = "return Validate();";
}
protected void btnConfirm_Click(object sender, EventArgs e)
{
//save something in database
}
更新:
这篇文章引起了我的注意,不知道为什么我没有把它包含在原帖中,但你可以使用OnClientClick&#39;在aspx标签中:
<asp:Button runat="server" ID="btnConfirm" OnClientClick="return Validate();" Text="Confirm" OnClick="btnConfirm_Click" />
<script language="javascript">
function Validate() {
return confirm('Save in db?');
}
</script>
答案 1 :(得分:5)
您需要在按钮单击上添加两个事件。 OnClientClick
处理客户端脚本代码,OnClick
处理服务器端事件调用
所以添加两个事件和那些处理程序。你正在获得NullReferenceException
。
<asp:Button runat="server" ID="btnConfirm" Text="Confirm" OnClick="btnConfirm_Click" OnClientClick="return Validate();" />
并且在您的javascript
代码中可以
function Validate(){
if (valied())
return true;
return false;
}
答案 2 :(得分:2)
确认后100%代码!当你想要删除或更新某些内容时,某些内容对于后面的代码或者asp.net中的服务器端确认非常不感兴趣,我在经过长时间的搜索后得到了它的解决方案,如下所示:
<asp:Button ID="btnSave" runat="server" Text="Save" OnClientClick="return confirm('Are you sure to BLOCK this customer ?')" OnClick="btnSave_Click" />
现在,只要您点击此按钮,它就会要求确认,如果您选择&#34;否&#34;页面将不会发布,如果您选择&#34;是&#34;然后页面将发布,你的按钮点击事件将会激发......如下所示
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
}
// Before coming here,,,there will be confirmation
protected void btnSave_Click(object sender, EventArgs e)
{
GetCustomerInfo();
}