您的位置:首页 > 其它

在Silverligh中调用J“.NET研究”avascript (四种调用方法+简单与复杂参数的传递)

2011-10-18 22:39 561 查看
  在本文我们将一起学习如何在Silverlight后台代码中调用javascritp脚本。Silverlight中内置了对于HTML、客户端脚本等的支持。很多情况下,我们编写的Web应用程序中用了一些JavaScript或者AJAX框架,我们可以在Silverlight调用某些脚本方法,或者说在Silverlight中触发某个脚本的执行。

  本文将示例如何调用Silverlight脚本, 要使用此功能,我们需要引入命名空间:

using System.Windows.Browser; //引入此命名空间

  调用javascript脚本方法有以下四种(本例中我们将在第二种参数处理示例中演示如何使用它们):

  方法一:直接调用脚本对象

  方法二:使用GetProperty获取脚本对象

  方法三:使用HtmlPage.Window.Eval直接执行javascript语句

  方法四:使用CreateInstance创建脚本对象

  这里,我们示例如何传递和传回:

  1、简单参数与结果(本例:传入两个整数,返回Float结果)

  2、复杂参数与结果(本例: 传入自定义的PlusNumbers类实例,传回自定义的PlusResults类实例结果)

  首先,我们创建新的Silverlight应用程序SLcallJSfunction。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using System.Windows.Browser; //引入此命名空间

namespace SLcallJSfunction

  对应的Javascript代码如下:

<script type="text/javascript" >

//说明: arg是传入的参数,它是在SL后台代码定义的类

//myResult是计算结果,它也是SL后台代码定义的类,要使用它之前必须在SL代码中进行注册

//注册方法是:HtmlPage.RegisterCreateableType("JSresultType",typeof(PlusResults)); //PlusResults是后台代码定义的类

function Plus(arg) //把类实例(arg)作为参数对象传入到Javascript代码中

{

var myXaml = $get("Xaml1");

var myResult = myXaml.content.services.createObject("JSresultType"); //创建一个在javascript中的类实例(此类在SL中定义)

myResult.RetValue = arg.X + arg.Y; //参数类成员进行运算后,结果赋值给结果类成员

return myResult; //返回结果类

}

myJsPlus = function(arg)

{

}

myJsPlus.prototype.myPlus = function(arg)

{

var myXaml = $get("Xaml1");

var myResult = myXaml.content.services.createObject("JSresultType"); //创建一个在javascript中的类实例(此类在SL中定义)

myResult.RetValue = arg.X + arg.Y; //参数类成员进行运算后,结果赋值给结果类成员

return myResult; //返回结果类

}

</script>

  SLcallJSfunctionTestPage.aspx页面代码如下:

<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Register Assembly="System.Web.Silverlight" Namespace="System.Web.UI.SilverlightControls"
TagPrefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" style="height:100%;">
<head runat="server">
<title>SLcallJSfunction</title>
<script type="text/javascript" >上海闵行企业网站制作 #000000;">

//说明: arg是传入的参数,它是在SL后台代码定义的类
//myResult是计算结果,它也是SL后台代码定义的类,要使用它之前必须在SL代码中进行注册
//注册方法是:HtmlPage.RegisterCreateableType("JSresultType",typeof(PlusResults)); //PlusResults是后台代码定义的类

function Plus(arg)  //把类实例(arg)作为参数对象传入到Javascript代码中
{
var myXaml = $get("Xaml1");
var myResult = myXaml.content.services.createObject("JSresultType"); //创建一个在javascript中的类实例 (此类在SL中定义)
myResult.RetValue = arg.X + arg.Y;  //参数类成员进行运算后,结果赋值给结果类成员
return myResult; //返回结果类
}

myJsPlus = function(arg)
{
}
myJsPlus.prototype.myPlus = function(arg)
{
var myXaml = $get("Xaml1");
var myResult = myXaml.content.services.createObject("JSresultType"); //创建一个在javascript中的类实例 (此类在SL中定义)
myResult.RetValue = arg.X + arg.Y;  //参数类成员进行运算后,结果赋值给结果类成员
return myResult; //返回结果类
}

</script>
</head>
<body style="height:100%;margin:0;">
<form id="form1" runat="server" style="height:100%;">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div  style="height:100%;">
<asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/SLcallJSfunction.xap" MinimumVersion="2.0.31005.0" Width="100%" Height="100%" />
</div>
</form>
</body>
</html>


  运行时,在两个文本输入框内分别输入两上整数,然后点击按钮,运行效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: