一起谈.NET技术,在Silverligh中调用Javascript (四种调用方法+简单与复杂参数的传递)
2011-09-02 00:19
786 查看
在本文我们将一起学习如何在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页面代码如下:
运行时,在两个文本输入框内分别输入两上整数,然后点击按钮,运行效果如下:
本文将示例如何调用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" > //说明: 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>
运行时,在两个文本输入框内分别输入两上整数,然后点击按钮,运行效果如下:
相关文章推荐
- 在Silverligh中调用J“.NET研究”avascript (四种调用方法+简单与复杂参数的传递)
- SilverLight学习笔记--Silverligh之在SL中调用Javascript (四种调用方法+简单与复杂参数的传递)
- SilverLight学习笔记--Silverligh之在Javascript中调用.NET(包括简单参数和复杂参数的操作)
- 一起谈.NET技术,JavaScript 调用 ASP.NET WebService 的简单方法
- 一起谈.NET技术,C#后台调用前台javascript的五种方法
- 反射技术动态调用方法中的引用类型参数传递 (转)
- free pascal(lazarus)版的android JNI进阶篇:反向调用java的方法并传递复杂参数
- 怎样在前端Javascript中调用C#方法(2)传递参数(附源码+高手勿入)
- JavaScript 将方法名作为参数传递、调用。(被传递方法带参数)
- Javascript 定时器调用传递参数的方法
- 一起谈.NET技术,SilverLight调用WebService的方法
- Javascript 调用C# 代码并传递参数的两种方法
- 一起谈.NET技术,.NET动态调用DLL的方法
- 用javascript实现html页面之间的参数传递的四种方法
- JS调用OC简单实例-传递一个或者多个参数给oc方法
- Javascript 定时器调用传递参数的方法
- JavaScript 定时器调用传递参数的方法
- 一起谈.NET技术,C# 中奇妙的函数--联接序列的五种简单方法
- javascript实现html页面之间参数传递的四种方法实例分析
- 一起谈.NET技术,在ASP.NET网页间传递数据的五种方法