在主页面上定义JS函数但是用内容页面修改它?

时间:2015-07-18 16:23:56

标签: javascript jquery asp.net

我在内容页面上有一个JS函数,需要一些特定于该内容页面的控件ID。

内容页面

 function invokeAjaxrequest() {
            $find("<%= RadAjax1.ClientID%>").ajaxRequestWithTarget("<%= RadAjax1.UniqueID%>", "reload");
        }

母版页

function closeAlert(oWnd) {
            var arg = oWnd.argument;
            if (arg) {
                addAlert(arg);
                invokeAjaxrequest();
            }
        }

如何定义invokeajaxrequest函数,或检查它是否存在于母版页中,这样如果内容页面没有定义,它不会导致异常?

3 个答案:

答案 0 :(得分:2)

您可以使用

检查功能是否存在
    if (typeof func === "function")

添加到您的代码中:

    function closeAlert(oWnd) {
        var arg = oWnd.argument;
        if (arg) {
            addAlert(arg);
            if (typeof invokeAjaxrequest === "function") { 
                invokeAjaxrequest();
            }
            // misread - you _don't_ want an error if it doesn't exist
            // so just do nothing here (don't have the else)
            //else {
            //    alert("invokeAjaxrequest must be defined on each page");
            //}
        }
    }

作为额外的,我会考虑使用某种形式的回调,而不是检查是否存在func。

答案 1 :(得分:2)

这是一个可能的解决方案

母版页 - 定义默认功能行为

<!-- this will be overridden in the content page -->
<asp:ContentPlaceHolder ID="PageScriptSection" >
    function invokeAjaxrequest() {
    }
</asp:ContentPlaceHolder>

这确保了函数alwayss存在。要覆盖它,可以在内容页面中定义它

内容页面 - 如有必要,覆盖特定页面的脚本

<asp:Content ID="CustomScript" ContentPlaceHolder="PageScriptSection">
    function invokeAjaxrequest() {
         $find("<%= RadAjax1.ClientID%>").ajaxRequestWithTarget("<%= RadAjax1.UniqueID%>", "reload");
    }
</asp:Content>

答案 2 :(得分:0)

所有常规函数都是window对象中的metod。

假设您的内容页面已加载到父iframe中,

从父(主)的内容窗口中检查:

if (window.parent.invokeAjaxrequest== "function") { }

从父(主)中的内容窗口定义:

window.parent.invokeAjaxrequest = function() { .... };

如果您使用这样的政策,请注意跨域政策,否则您将获得&#34;保护&#34;错误,您无法从父级到内容副verca访问任何内容。