Page.ClientScript.RegisterStartupScript的问题

时间:2015-08-06 12:24:09

标签: javascript jquery asp.net

我想在加载ASP.NET页面时执行Javascript函数。 Javascript的purpsose是根据相应复选框的已检查状态显示一些控件。

我使用过该行:

Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "sethiddenMoSESfields", True)

其中sethiddenMoSESfields是我的Javascript函数的名称。

这是功能:

function sethiddenMoSESfields() {
var chkgpstatus = document.getElementById("chkGP");
var chknursestatus = document.getElementById("chkNurse");
if (chkgpstatus.checked) {
    $('#ddlGP').show();
}
if (chknursestatus.checked) {
    $('#ddlNurse').show();
}

}

问题是在加载页面时似乎没有正确呈现,我收到以下错误:

  

0x800a138f - Microsoft JScript运行时错误:预期的对象

发生错误是因为页面正在呈现函数调用,如下所示:

sethiddenMoSESfields
(function(id) {
    var e = document.getElementById(id);
    if (e) {
        e.dispose = function() {
            Array.remove(Page_ValidationSummaries, document.getElementById(id));
        }
        e = null;
    }
})('valsum_GPSEA');

由于某种原因,它将另一个函数调用(与我的验证控件相关)编写为我的sethiddenMoSESfields函数调用的参数。我不知道为什么这样做。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

你似乎错误地调用了这个方法。 RegisterStartupScript的第3个参数应该是您要执行的实际脚本。在你的情况下,这将是" sethiddenMoSESfields();"如果您已经在HTML中包含了函数定义。

如果没有,您必须在字符串中输入整个sethiddenMoSESfields函数定义,然后是sethiddenMoSESfields();。像

这样的东西
Page.ClientScript.RegisterStartupScript(this.GetType(), "addScript", @"
        function sethiddenMoSESfields() {
            var chkgpstatus = document.getElementById('chkGP');
            var chknursestatus = document.getElementById('chkNurse');
            if (chkgpstatus.checked) {
                $('#ddlGP').show();
            }
            if (chknursestatus.checked) {
                $('#ddlNurse').show();
            }
        }
        sethiddenMoSESfields();", true);

我改变了"到'让它更容易逃脱。此外,最好将第一个参数更改为页面特定类型。

您看到的验证脚本实际上是存在的,与您调用RegisterStartupScript的方式无关。