Javascript在Silverlight下调用C#函数

时间:2009-02-24 14:28:47

标签: javascript silverlight function

我有一个使用C#的Silverlight应用程序,有两个主要功能,我想通过JavaScript函数访问它们。我在类中完成了RegisterScriptableObject()并为我想要访问的函数设置了[ScriptableMember]。

这是Silverlight对象:

<div id="silverlightControlHost">
    <object id="silverlightControl" data="data:application/x-silverlight," type="application/x-silverlight-2" width="1024px" height="300px">
        <param name="source" value="DrawingWaveForm.xap"/>
        <param name="onerror" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="2.0.31005.0" />
        <param name="autoUpgrade" value="true" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
            <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
        </a>
    </object>
    <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
</div>

这些是我的JavaScript函数:

    function Start()
    {
        var control = document.getElementById("silverlightControl");            
        control.Content.Page.Start();
    }

    function Stop()
    {
        var control = document.getElementById("silverlightControl");            
        control.Content.Page.Stop();
    } 

任何人都可以告诉我哪里出错了,因为它似乎无法正常工作

4 个答案:

答案 0 :(得分:2)

正如timheuer所说,[Scriptable]在您的Silverlight方法上。

在班上打电话:

HtmlPage.RegisterScriptableObject("Page", this);  

从您的javascript中调用标记为Scriptable的Silverlight方法,如下所示:

function CenterMap(latitude, longitude)
{
     var silvercontrol = document.getElementById("ctl00_cphMain_slControl");
     if (silvercontrol)
     silvercontrol.Content.Page.CenterOnCoordinates(latitude, longitude);
}

This page向您展示了这一点以及如何反向,从Silverlight调用javascript方法。这是一个非常好的模型。

答案 1 :(得分:1)

您需要确保将C#函数标记为Scriptable。有关如何完成此操作的详细信息,请参阅http://silverlight.net/learn/learnvideo.aspx?video=65683

答案 2 :(得分:0)

这只是一个想法,但您是否需要公开这些方法(它们似乎不在您的代码中)?

答案 3 :(得分:0)

我自己就是在解决这个问题。第一个js函数有效,但其他一切都会抛出此错误。在修补之后,我注意到更改成功运行的底层C#函数没有任何影响 - 浏览器正在使用Silverlight控件的缓存版本。尝试清除浏览器的缓存。