Я пытаюсь преобразовать карту SP2007 в решение для песочницы Sharepoint, но по какой-то причине, когда я загружаю свою веб-часть и пытаюсь изменить свойства, я получаю эту ошибку Javascript,
Значение свойства UpdateWebPartMenuFocus является нулевым или неопределенным, а не объектом Function
Я провел исследование этой ошибки и нашел только несколько сообщений. Это происходит потому, что если кто-то не ссылался на Core.js в v4.master (мастер-страница по умолчанию), но я проверял, и на него уже ссылались, как показано ниже,
<SharePoint:ScriptLink language="javascript" name="core.js" OnDemand="true" runat="server" />
и вот мой код
StringBuilder mapHTML = new StringBuilder();
mapHTML.Append("<div>");
mapHTML.Append("<script src=\"https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3\"></script>");
mapHTML.Append("<script type='text/javascript' id='clientEventHandlersJS'>");
mapHTML.Append("var map = null;");
mapHTML.Append("function GetMap()");
mapHTML.Append("{");
mapHTML.Append("try{");
mapHTML.Append(" var latLon = new VELatLong(52.29504228453734,-2.2851562500000044);");
mapHTML.Append("map = new VEMap('myMap');");
mapHTML.Append("map.LoadMap(latLon,5);");
mapHTML.AppendFormat("map.Find(null, '{0}', null, null, null, null, false, false, false, true,LocFound);", HtmlEncode(_Location));
mapHTML.Append("}");
mapHTML.Append("catch(err){}");
mapHTML.Append("}");
mapHTML.Append("function LocFound(thelayer, resultsArray, places, hasMore, veErrorMessage)");
mapHTML.Append("{");
mapHTML.Append("try{");
mapHTML.Append("if(places != null && places.length >0)");
mapHTML.Append("{");
mapHTML.Append("var latlong = places[0].LatLong;");
mapHTML.Append("}");
mapHTML.Append("else");
mapHTML.Append("{");
mapHTML.Append("myMap.style.display = 'none';");
mapHTML.Append("locationError.style.display = 'block';");
mapHTML.Append("}");
mapHTML.Append("var shape = new VEShape(VEShapeType.Pushpin,latlong);");
mapHTML.AppendFormat("shape.SetTitle('{0}');", HtmlEncode(_PushPinTitle));
mapHTML.Append("map.AddShape(shape);");
mapHTML.Append("map.SetZoomLevel(14);");
mapHTML.Append("}");
mapHTML.Append("catch(err){}");
mapHTML.Append("}");
mapHTML.Append(" function addLoadEvent(func) ");
mapHTML.Append(" { ");
mapHTML.Append("try{");
mapHTML.Append(" var oldonload = window.onload; ");
mapHTML.Append(" if(typeof window.onload != 'function') ");
mapHTML.Append(" { ");
mapHTML.Append(" window.onload = func; ");
mapHTML.Append(" } ");
mapHTML.Append(" else ");
mapHTML.Append(" { ");
mapHTML.Append(" window.onload = function()");
mapHTML.Append(" { ");
mapHTML.Append(" func(); ");
mapHTML.Append(" } ");
mapHTML.Append(" } ");
mapHTML.Append("}");
mapHTML.Append("catch(err){}");
mapHTML.Append(" } ");
mapHTML.Append("addLoadEvent(GetMap); ");
mapHTML.Append("</script>");
mapHTML.AppendFormat("<div id=\"myMap\" style=\"position:relative\" width:\"{0}\" height:\"{1}\" ></div>", HtmlEncode(_MapWidth), HtmlEncode(_MapHeight));
mapHTML.AppendFormat("<div id=\"locationError\" style=\"position:relative\">", HtmlEncode(_MapWidth), HtmlEncode(_MapHeight));
//mapHTML.AppendFormat("{0}", HtmlEncode(_LocationError));
mapHTML.Append("</br>");
mapHTML.AppendFormat("{0}", HtmlEncode(_Location));
mapHTML.Append("</div>");
mapHTML.Append("</div>");
Controls.Add(new LiteralControl(mapHTML.ToString()));
//AddControl(new LiteralControl(mapHTML.ToString()));
Теперь я не могу найти способ избавиться от этой ошибки. Во-вторых, если кто-нибудь знает любой лучший способ получить карту в веб-части с именем местоположения , например, с помощью Google API, Я видел несколько проектов, например
Код карты Bing Plex
Но он выглядит немного старомодно и менее функционально, поскольку в нем нет элементов управления AJAX.
(Примечание: я не могу использовать серебряный свет, так как количество клиентов очень велико, и я не хочу заставлять их устанавливать плагины для серебряного света или любые другие ограничения)