Ошибка неверного указателя при попытке вызвать метод silverlight из javascript - PullRequest
1 голос
/ 30 августа 2011

Из приложения Silverlight

public MainPage()
{
    InitializeComponent();

    HtmlPage.RegisterScriptableObject("MainPage", this);
}

[ScriptableMember]
public void StartEditLocation(string name, int? top, int? left)
{
    MapTitle.Text = "Set Contract Location - " + name;
    LocationEllipse.SetValue(Canvas.LeftProperty, left ?? 30);
    LocationEllipse.SetValue(Canvas.TopProperty, top ?? 30);
}

И из JavaScript

<object data="data:application/x-silverlight-2," id="admin_map" type="application/x-silverlight-2" width="100%" height="100%">
    <param name="source" value="/ClientBin/AdminMap.xap"/>
    <param name="onError" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="4.0.50826.0" />
    <param name="autoUpgrade" value="true" />
    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
        <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
    </a>
</object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>

function show_map(top, left) {
    var control = document.getElementById("admin_map");
    var values = new Array();
    values[0] = $('#Name').val();
    values[1] = top;
    values[2] = left;
    if (control)
        control.Content.MainPage.StartEditLocation(values);
    else
        alert('Error loading map');
}

Кажется, проблема в вызове метода, потому что он проходит проверку if, чтобы убедиться, что элемент управления существует. Я думаю, что это должна быть какая-то синтаксическая ошибка или что-то простое.

Ответы [ 3 ]

0 голосов
/ 31 августа 2011

Я обнаружил проблему, у меня был div, в котором серебряный свет был скрыт по умолчанию, поэтому он никогда не инициализировался. Когда я вижу его и сразу скрываю при загрузке страницы, используя javascript, он сразу инициализируется и успешно вызывает метод.

0 голосов
/ 01 сентября 2011

Вы также можете избежать вызова метода на незагруженном элементе управления Silverlight.

function show_map(top, left) {
var control = document.getElementById("admin_map");
var values = new Array();
values[0] = $('#Name').val();
values[1] = top;
values[2] = left;
if (control)
    if (control.IsLoaded) {
        control.Content.MainPage.StartEditLocation(values);
    }
else
    alert('Error loading map');

}

0 голосов
/ 30 августа 2011

Вы передаете массив JavaScript вместо значений. Попробуйте с этим:

control.Content.MainPage.StartEditLocation($('#Name').val(), top, left);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...