如何在父页面提交给服务器时调用User Control javascript?

时间:2010-09-08 14:21:13

标签: javascript asp.net user-controls

net usercontrol位于我的aspx页面上。在usercontrol中有一个javascript函数,我想在每次包含usercontrol的页面提交给服务器时触发。 (直接在此之前发生)理想情况下,我宁愿不必在父代中编写任何代码来实现这一点,但我不确定usercontrol目前能够做什么。用户控件是否可以知道页面正在提交给服务器并在此之前触发该功能?是否有某种事件发生在这里?

这可能吗?我的描述清楚了吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

回发是服务器端事件。在客户端,页面刚刚再次加载...所以如果你真的想为回发编写客户端脚本(无论是在页面还是用户控件中),我建议你发送一个隐藏的输入或某事作为它是否是回发的指标。像:

标记:

<asp:HiddenField ID="postBackFlag" runat="server" Value="false" />

服务器端:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If IsPostBack Then
        Me.postBackFlag.Value = "true"
    End If
End Sub

客户方:

    $(document).ready(function() {
        if ($('input[id$=_postBackFlag]').val() === 'true') {
            //do stuff
        }
    });    

答案 1 :(得分:0)

您可以为表单的submit事件添加客户端事件处理程序。您可以在用户控件中调用Page_Load时生成javascript,并使用Page.ClientScript.RegisterStartupScript将其添加到页面中。

string key = "submitscript";

System.Text.StringBuilder script = new System.Text.StringBuilder();
script.Append("function mySubmitHandler(e) { \n");
script.Append("    // TODO my javascript here \n");
script.Append("    alert('derp'); \n");
script.Append("} \n");
script.AppendFormat("var f = document.getElementById('{0}'); \n", Page.Form.ClientID);
script.Append("if(f.addEventListener){\n");
script.Append("    f.addEventListener('submit', mySubmitHandler, false); \n");
script.Append("} else { \n");
script.Append("    f.attachEvent('onsubmit', mySubmitHandler); \n");
script.Append("} \n");

Page.ClientScript.RegisterStartupScript(this.GetType(), key, script.ToString(), true);

只为typekey参数的每个组合添加一次脚本,因此您可以在页面上拥有多个用户控件,此脚本只会添加一次。