尝试从javascript调用silverlight方法时出现无效的指针错误

时间:2011-08-29 23:40:56

标签: javascript silverlight silverlight-4.0

来自silverlight app

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 :(得分:0)

您正在传递javascript数组而不是值。试试这个:

control.Content.MainPage.StartEditLocation($('#Name').val(), top, left);

答案 1 :(得分:0)

我发现了问题,默认情况下我有隐藏的银光,因此它从未真正初始化。当我看到它并立即在页面加载时使用javascript隐藏它,它会立即初始化并成功调用该方法。

答案 2 :(得分:0)

您还可以防止在卸载的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');

}