1

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

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

在客户端,我有一个要在单击事件上调用的 javascript 函数,例如 btnSave.Attributes.Add("onclick","javascript: return CheckIsDirty();")

我不确定这两个将执行哪个命令。因为我希望首先在客户端警告任何尚未填写的数据输入字段,然后再实际保存任何数据。

有什么帮助吗?

4

4 回答 4

3

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

所以你可以使用它。

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

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

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

于 2008-10-15T11:02:05.977 回答
2

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

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

于 2008-10-15T11:08:12.907 回答
1

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

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

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

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

于 2008-10-15T12:01:23.517 回答
0

我认为您需要更好地理解客户端的含义和服务器端的含义以及它们之间的关系。我已经看到越来越多的开发人员把它弄得一团糟。

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

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

于 2008-10-15T11:07:00.740 回答