Asp.net服务器控制服务器端/客户端的相同事件处理顺序

时间:2008-10-15 10:53:25

标签: asp.net event-handling

我有一个asp.net服务器控件(在其定义中使用asp:)。该按钮已设置为回发。

在服务器端,我有on click事件处理程序 例如btnSave_click()

在客户端,我有一个javascript函数可以在click事件上调用 例如btnSave.Attributes.Add(“onclick”,“javascript:return CheckIsDirty();”)

我不确定这两个命令的执行顺序。因为我想首先在客户端警告在实际保存任何数据之前尚未填写的任何数据输入字段。

任何帮助?

4 个答案:

答案 0 :(得分:3)

第一个客户端,第二个服务器端。

所以你可以使用它。

我也在某些情况下使用它,例如:

close.Attributes["OnClick"] = "return confirm('Are you sure?')";

在这种情况下,如果用户按下“否​​”,则服务器端事件处理程序甚至不起作用。

答案 1 :(得分:2)

这里的诀窍是如果您的测试失败,则将此全局变量“Page_IsValid”设置为false,这将停止回发。

阅读此页http://msdn.microsoft.com/en-us/library/aa479045.aspx,其中解释了服务器端和客户端验证。你可以使用一些好的代码示例。

答案 2 :(得分:1)

设置onClick JavaScript事件的方式实际上会阻止它在覆盖ASP.NET事件处理程序时回发。完成您想要的验证的正确方法是:

btnSave.Attributes.Add("onclick", "CheckIsDirty();" + GetPostBackEventReference(btnSave).ToString());

请注意,您追加GetPostBackEventReference的结果,以便在JavaScript中首先调用CheckIsDirty()方法,然后调用ASP.NET回发方法。假设您的方法返回true,则该按钮将发布。如果它返回false,那么它不会导致回发。

这听起来像你想要完成的吗?

答案 3 :(得分:0)

我认为您需要更好地理解客户端的含义以及服务器端的含义以及它们如何相互关联。我看到越来越多的开发人员弄得一团糟。

当然,客户端将在您的情况下首先执行。实际上,在执行服务器代码之后无法执行它(除非您手动执行某些操作)。我将尝试给出一个简短的解释:

无论您在服务器中拥有什么,都会在客户端上生成一些HTML,并且用户始终在客户端上进行交互。所以你有一个用户点击的html按钮。浏览器将执行的是执行与之关联的javascript,或者如果没有指定javascript,并且按钮是提交按钮,它将提交表单。如果你检查生成的html,你会看到onclick事件你会得到你添加的脚本,然后是一些自动生成的脚本,它实际上会将表单提交给服务器。只有在提交页面时才会执行服务器端代码。