none
MasterPage与 JavaScript脚本共存的问题 RRS feed

  • 问题

  • 在用ArcGIS+ASP.NET中,使用一个地图来实现点选之后提取出所选省份名称的功能。在普通页面测试,完全可用。但是在MasterPage中,却不好用。

    通过多层筛选,问题出在这里:
    <esri:Toolbar ID="Toolbar1" runat="server" BuddyControlType="Map" Group="Toolbar1_Group" WebResourceLocation="/aspnet_client/ESRI/WebADF/" 
                            Width="168px" CurrentTool="choose" Height="40px" >
                <ToolbarItems>
                <esri:Tool ClientAction="Map1)
    "  Name="choose"  Text="点击此处出开始选择省份"  JavaScriptFile=" " />
                </ToolbarItems>
            <BuddyControls>
                <esri:BuddyControl Name="Map1" />
            </BuddyControls>
            </esri:Toolbar>
    在网上搜索之后,发现说,在解析的时候会把Masterpage中所有的元素的id解析成ctl00_ContentPlaceHolder1_+原ID,推断是这个原因。只是,不知道如何修改,能让解析后能对应上正确的id



    附上js代码,虽然不一定有用
    var identifyFilePath = "";
    var identifyImageType = "png";
    var temp="";
    
    // Set up Identify tool
    function choose(divid) {
        map = Maps[divid];
        MapPoint(map.controlName, "choose", false);
        map.divObject.onmousedown=MapIdClick;
        map.divObject.onmouseout=MapIdentity;
    }
    
    // Event handler for Choose
    function MapIdClick(e) {
        map.cursor = map.divObject.style.cursor;
        
    	//map.divObject.style.cursor = "wait";
    	getXY(e);
    	var box = calcElementPosition(map.containerDivId);
    	zleft = mouseX - box.left;
    	ztop = mouseY - box.top;
       
    	map.xMin=zleft;
    	map.yMin=ztop;
    	
        temp+=zleft + "&" + ztop;
        temp+="&";
    	return false;
    }
    
    //Event handler for Identity
    function MapIdentity(){
        var message = temp;
    	var context = map.controlName;
    	eval(map.identifyCallbackFunctionString);
    	return false;
    }
    2009年4月5日 7:54

答案

  • 在用到客户端的id的地方先使用
    var xxId = "<%=xx服务器控件的.ClientID%>"

    用的时候才有
    document.getElementById(xxId)
    即可
    孟宪会
    2009年4月5日 9:21
    版主
  • 一般情况下,除了id,对客户端看来,是否使用了Masterpage是无所谓的,
    你的没有起作用,要检查你是怎么使用的,
    如果你的id在choose.js文件里面,你需要调整你的文件里js的写法,所有的id都需要使用参数的方法传递进去,或者,将id定义分离出来。
    不要在choose.js里面的任何地方写Map1这样的写法。


    孟宪会
    2009年4月5日 11:38
    版主

全部回复

  • 在用到客户端的id的地方先使用
    var xxId = "<%=xx服务器控件的.ClientID%>"

    用的时候才有
    document.getElementById(xxId)
    即可
    孟宪会
    2009年4月5日 9:21
    版主
  • 我们试了您的方法,也许是没有试对吧,还是不行。

    我们现在在aspx页面上有个MAP控件,ID是Map1,是在ContentPlaceHolder里面的,然后页面上有个icon,点击后触发的动作是执行choose.js这个脚本,这个时侯鼠标移动到地图上的时候就会相应的变成手型,单击选择后,鼠标移出MAP区域后,js记录下来所点击的省份存到数组中

    我们在aspx中添加了脚本var xxId = "<%=xx服务器控件的.ClientID%>"

    可是在执行的时候,在js中的函数处设置了断点,可是发现程序根本没有过这个地方,不知道masterpage在这是怎么处理的
    2009年4月5日 10:59
  • 一般情况下,除了id,对客户端看来,是否使用了Masterpage是无所谓的,
    你的没有起作用,要检查你是怎么使用的,
    如果你的id在choose.js文件里面,你需要调整你的文件里js的写法,所有的id都需要使用参数的方法传递进去,或者,将id定义分离出来。
    不要在choose.js里面的任何地方写Map1这样的写法。


    孟宪会
    2009年4月5日 11:38
    版主