asp.net 后台定义js函数

最近遇到这样一个问题:在做统计报表的时候,同一个报表需要再不同的统计方式下显示,所以把该统计报表抽出来做成了一个单独的用户控件,该用户控件中也有自己的查询条件。其中有一个查询条件是从实体库中选择实体后带出来,这是用前台脚本实现的,这样就会存在一个问题,无论在那种统计方式下选择实体,实体的信息只显示在最后一个统计方式下,如下图所示:

最后找出原因是用户控件中选择实体的实现方法是在前台写了一个函数:

 function SelectOwner() {

        var argumentXML = GetArgumentsXML();
        var url = "../../Modules/General/Product/SelectCustomer.aspx";
        var features = "dialogHeight: 650px; dialogWidth: 950px; center: Yes; help: Yes; scroll:auto; status: no; resizable: yes";
        var xmlDom = showModalDialog(url, argumentXML, features);
        if (null != xmlDom) {
            var nodes = xmlDom.selectNodes("root/Customer");
            var id = "";
            var name = "";
            var n = nodes.length - 1;
            var re = /\s/g;
            for (i = 0; i <= n; i++) {
                var node = nodes(i);
                id += node.attributes.getNamedItem("CustomerEntityID").value.replace(re, "") + ((i == n) ? "" : ";");

                name += node.attributes.getNamedItem("CustomerName").value.replace(re, "") + ((i == n) ? "" : ";");
            }

            document.getElementById("<%=tbProprietor.ClientID %>").value = name;
           
        }
        return false;
    }


 

 业主单位
                        <asp:TextBox ID="tbProprietor" runat="server" CssClass="kpms-textboxsearch" EnableTheming="false"></asp:TextBox>
                        <asp:ImageButton ID="ibtnSelectOwner" runat="server" OnClientClick="return SelectOwner();"
                            ImageUrl="~/Themes/Images/btn_select.gif" />


因为这个用户控件在页面中总共使用了三次,所以查看源文件时会发现整个页面有三个SelectOwner()前台函数,系统不知道到底需要哪一个,所以默认为最后一个,所以在前两种统计方式中选择实体后会显示在最后一个统计方式中而不显示在对应的统计方式中。

 

解决方案:

1.在后台定义js函数,在满足条件的情况下给选择按钮增加单击事件的属性。

注意:在后台定义js函数时,若要给某个控件赋值,则需直接取解析出来的html的id值

代码如下:

 private void DefineClick()
        {
            if (SelectType == "工程类型")
            {
                string sCript= @"<script  type='text/javascript'>
        function SelectProject() {
        var argumentXML = GetArgumentsXML();
        url = '../../Modules/General/Product/SelectProject.aspx';
        var features = 'dialogHeight: 650px; dialogWidth: 950px; center: Yes; help: Yes; scroll:auto; status: no; resizable: yes';
        var xmlDom = showModalDialog(url, argumentXML, features);
        if (null != xmlDom) {
            var nodes = xmlDom.selectNodes('root/ProjectEntity');
            var id = '';
            var code = '';
            var name = '';
            var re = /\s/g;
            var n = nodes.length - 1;
            for (i = 0; i <= n; i++) {
                var node = nodes(i);
                id += node.attributes.getNamedItem('ProjectEntityID').value.replace(re, '') + ((i == n) ? '' : ';');
                code += node.attributes.getNamedItem('ProjectEntityCode').value.replace(re, '') + ((i == n) ? '' : ';');
                name += node.attributes.getNamedItem('ProjectEntityName').value.replace(re, '') + ((i == n) ? '' : ';');
            }
            document.getElementById('UCptTypeNotSign_tbProjectPhaseCode').value = code;
            document.getElementById('<%=tbProjectPhaseName.ClientID %>').value = name;
            return true;
        }
        return false;
       }</script>";
                Response.Write(sCript);
                ibtnSelectProject.Attributes.Add("onclick", "return SelectProject()");

            }
            else if (SelectType == "业主")
            {

            }
        }


这样写还是不行,相当于还是有三个相同名称的脚步函数所以调整了下,最终结果如下:

private void DefineClick()
        {
            string script = string.Empty;
            string scriptHeader = "<script  type='text/javascript'>";
            string scriptPTFunName = " function SelectProject() ";
            string scriptPTBody = @"{
        var argumentXML = GetArgumentsXML();
        url = '../../Modules/General/Product/SelectProject.aspx';
        var features = 'dialogHeight: 650px; dialogWidth: 950px; center: Yes; help: Yes; scroll:auto; status: no; resizable: yes';
        var xmlDom = showModalDialog(url, argumentXML, features);
        if (null != xmlDom) {
            var nodes = xmlDom.selectNodes('root/ProjectEntity');
            var id = '';
            var code = '';
            var name = '';
            var re = /\s/g;
            var n = nodes.length - 1;
            for (i = 0; i <= n; i++) {
                var node = nodes(i);
                id += node.attributes.getNamedItem('ProjectEntityID').value.replace(re, '') + ((i == n) ? '' : ';');
                code += node.attributes.getNamedItem('ProjectEntityCode').value.replace(re, '') + ((i == n) ? '' : ';');
                name += node.attributes.getNamedItem('ProjectEntityName').value.replace(re, '') + ((i == n) ? '' : ';');
            }";
            string scriptPTFooter = string.Empty;

            string scriptOwnerFunName = " function SelectOwner() ";
            string scriptOwnerBody = @"  {
        var argumentXML = GetArgumentsXML();
        var url = '../../Modules/General/Product/SelectCustomer.aspx';
        var features = 'dialogHeight: 650px; dialogWidth: 950px; center: Yes; help: Yes; scroll:auto; status: no; resizable: yes';
        var xmlDom = showModalDialog(url, argumentXML, features);
        if (null != xmlDom) {
            var nodes = xmlDom.selectNodes('root/Customer');
            var id = '';
            var name = '';
            var n = nodes.length - 1;
            var re = /\s/g;
            for (i = 0; i <= n; i++) {
                var node = nodes(i);
                id += node.attributes.getNamedItem('CustomerEntityID').value.replace(re, '') + ((i == n) ? '' : ';');

                name += node.attributes.getNamedItem('CustomerName').value.replace(re, '') + ((i == n) ? '' : ';');
            }";
            string scriptOwnerFooter = string.Empty;

            string scriptFooter = "</script>";
            if (SelectType == "工程类型")
            {
                scriptPTFunName = "function PTSelectProject()";
                scriptOwnerFunName = "function PTSelectOwner()";
                scriptPTFooter = @"
            document.getElementById('UCptTypeNotSign_tbProjectPhaseCode').value = code;
            document.getElementById('UCptTypeNotSign_tbProjectPhaseName').value = name;
            return true;
        }
        return false;
       }";
                scriptOwnerFooter = @"
             document.getElementById('UCptTypeNotSign_tbProprietor').value = name;
           
        }
        return false;
    }";
                script = scriptHeader + scriptPTFunName + scriptPTBody + scriptPTFooter + scriptOwnerFunName + scriptOwnerBody + scriptOwnerFooter + scriptFooter;
                Response.Write(script);
                ibtnSelectProject.Attributes.Add("onclick", "return PTSelectProject()");
                ibtnSelectOwner.Attributes.Add("onclick", "return PTSelectOwner()");
            }

            else if (SelectType == "业主")
            {
                scriptPTFunName = "function OWSelectProject()";
                scriptOwnerFunName = "function OWSelectOwner()";
                scriptPTFooter = @"
            document.getElementById('UCOwnerNotSign_tbProjectPhaseCode').value = code;
            document.getElementById('UCOwnerNotSign_tbProjectPhaseName').value = name;
            return true;
        }
        return false;
       }";
                scriptOwnerFooter = @"
             document.getElementById('UCOwnerNotSign_tbProprietor').value = name;
           
        }
        return false;
    }";
                script = scriptHeader + scriptPTFunName + scriptPTBody + scriptPTFooter + scriptOwnerFunName + scriptOwnerBody + scriptOwnerFooter + scriptFooter;

                Response.Write(script);
                ibtnSelectProject.Attributes.Add("onclick", "return OWSelectProject()");
                ibtnSelectOwner.Attributes.Add("onclick", "return OWSelectOwner()");

            }

            else if (SelectType == "合同类型")
            {
                scriptPTFunName = "function CTSelectProject()";
                scriptOwnerFunName = "function CTSelectOwner()";
                scriptPTFooter += @"
            document.getElementById('UCctTypeNotSign_tbProjectPhaseCode').value = code;
            document.getElementById('UCctTypeNotSign_tbProjectPhaseName').value = name;
            return true;
        }
        return false;
       }";
                scriptOwnerFooter += @"
             document.getElementById('UCctTypeNotSign_tbProprietor').value = name;
        }
        return false;
    }";
                script = scriptHeader + scriptPTFunName + scriptPTBody + scriptPTFooter + scriptOwnerFunName + scriptOwnerBody + scriptOwnerFooter + scriptFooter;

                Response.Write(script);
                ibtnSelectProject.Attributes.Add("onclick", "return CTSelectProject()");
                ibtnSelectOwner.Attributes.Add("onclick", "return CTSelectOwner()");

            }
        }


显示成功,只是这个函数太长了,应该还可以进一步优化。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值