在开发Web应用程序时,经常需要在Silverlight和HTML页面之间进行数据交互。本文将介绍一种方法,通过JavaScript将HTML页面上的数据发送到Silverlight页面,并展示如何使用Silverlight的RegisterScriptableObject
方法来实现这一过程。
首先,需要在Silverlight页面上定义一个类,这个类将被JavaScript调用。可以通过添加[ScriptableMember]
属性来实现这一点。下面是一个简单的示例:
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
HtmlPage.RegisterScriptableObject(
"loginProvider",
this
);
}
[ScriptableMember()]
public void Login(string password, string login)
{
this.Message.Text =
"Your login is: " + login +
"\r\nFirst letter of your password is: " +
(password.Length > 0 ? password[0].ToString() : "");
}
}
在上面的代码中,定义了一个名为Login
的方法,这个方法将被JavaScript调用。通过HtmlPage.RegisterScriptableObject
方法将当前对象注册为可脚本化的,这样就可以通过JavaScript访问了。
接下来,需要在HTML页面上编写JavaScript代码,以收集表单数据并将其发送到Silverlight控件。可以通过定义一个名为invokeManagedCode
的函数来实现这一点。
<script type="text/javascript">
function invokeManagedCode(){
var form = document.getElementById("loginpanel");
var password = form.password.value;
var user = form.user.value;
var control = document.getElementById("sl2b2");
control.Content.loginProvider.Login(password, user);
}
</script>
在上面的JavaScript代码中,首先获取了表单元素,然后获取了用户名和密码的值。最后,通过Silverlight控件的ID调用了Silverlight页面上定义的Login
方法。
为了使这个示例更加完整,还需要在HTML页面上添加一个表单,以便用户可以输入他们的用户名和密码。
<form id="loginpanel" name="input" ACTION="javascript:invokeManagedCode()">
Username: <input type="text" name="user">
Password: <input type="password" name="password">
<input type="Submit" value="Login">
</form>
在这个表单中,定义了两个输入字段,一个用于用户名,另一个用于密码。当用户点击“登录”按钮时,invokeManagedCode
函数将被调用,从而将数据发送到Silverlight页面。
需要注意的是,这只是实现HTML和Silverlight之间交互的一种方法。实际上,有多种方式可以实现这种交互,具体取决于具体需求和应用场景。