轉帖|其它|編輯:郝浩|2011-04-29 13:54:15.000|閱讀 788 次
概述:在做Silverlight和asp.net web應用程序中,常常會遇到將用戶登錄的相關信息從aspx頁面傳遞到Silverlight應用程序中,如何才能實現呢?現在總結如下,主要有兩種方法:
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在做Silverlight和asp.net web應用程序中,常常會遇到將用戶登錄的相關信息從aspx頁面傳遞到Silverlight應用程序中,如何才能實現呢?現在總結如下,主要有兩種方法:
假若從Login.aspx頁面登錄進來,并保存了Session相關信息,而另外一個功能是通過Silverlight來實現的,那么必然涉及到參數傳遞到那個Silverlight應用程序中去的問題。
Silverlight應用程序插件的aspx頁面為:index.aspx
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="index.aspx.cs" Inherits="ZDXX_index" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="//www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>MultiVideoPicture</title>
<mce:style type="text/css"><!--
html, body {
height: 100%;
overflow: auto;
}
body {
padding: 0;
margin: 0;
}
#silverlightControlHost {
height: 100%;
text-align:center;
}
--></mce:style><style type="text/css" mce_bogus="1"> html, body {
height: 100%;
overflow: auto;
}
body {
padding: 0;
margin: 0;
}
#silverlightControlHost {
height: 100%;
text-align:center;
}
</style>
<mce:script type="text/javascript" src="Silverlight.js"
mce_src="Silverlight.js"></mce:script>
<mce:script type="text/javascript"><!--
function onSilverlightError(sender, args) {
var appSource = "";
if (sender != null && sender != 0) {
appSource = sender.getHost().Source;
}
var errorType = args.ErrorType;
var iErrorCode = args.ErrorCode;
if (errorType == "ImageError" || errorType == "MediaError") {
return;
}
var errMsg = "Silverlight 應用程序中未處理的錯誤 " + appSource + "\n";
errMsg += "代碼: " + iErrorCode + " \n";
errMsg += "類別: " + errorType + " \n";
errMsg += "消息: " + args.ErrorMessage + " \n";
if (errorType == "ParserError") {
errMsg += "文件: " + args.xamlFile + " \n";
errMsg += "行: " + args.lineNumber + " \n";
errMsg += "位置: " + args.charPosition + " \n";
}
else if (errorType == "RuntimeError") {
if (args.lineNumber != 0) {
errMsg += "行: " + args.lineNumber + " \n";
errMsg += "位置: " + args.charPosition + " \n";
}
errMsg += "方法名稱: " + args.methodName + " \n";
}
引發新錯誤(errMsg);
}
// --></mce:script>
</head>
<body>
<form id="form1" runat="server" style="height:100%">
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="../ClientBin/SInfo.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<param name="windowless" value="true" />
<param name="initParams" value="root=<%=ROOT %>,role=<%=ROLE %>" />
<a href="//go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0"
mce_href="//go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0"
style="text-decoration:none" mce_style="text-decoration:none">
<img src="//go.microsoft.com/fwlink/?LinkId=161376"
mce_src="//go.microsoft.com/fwlink/?LinkId=161376"
alt="獲取 Microsoft Silverlight" style="border-style:none" mce_style="border-style:none"/>
</a>
</object><iframe id="_sl_historyFrame"
style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
</form>
index.aspx.cs代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using USTC;
public partial class ZDXX_index : System.Web.UI.Page
{
public int ROOT;
public int ROLE;
DM dm2 = new DM();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//獲取登錄用戶的Session信息,進行權限控制
string userID = Session[ "UserID"].ToString();
string strSQL = "select * from SYS_USERINF where ID=" + int.Parse(userID);
string role = dm2.getsql(strSQL).Tables[0].Rows[0][ "權限編號"].ToString();
if (role == "0" || role == "1")
{
//省級及高級維護人員
ROOT = 340000;
ROLE = 1;
}
else if (role == "2")
{
//市級人員
ROOT = int.Parse(dm2.getsql(strSQL).Tables[0].Rows[0][ "所在市編碼"].ToString().Trim());
ROLE = 2;
}
else if (role == "3")
{
//縣級人員
ROOT = int.Parse(dm2.getsql(strSQL).Tables[0].Rows[0][ "所在縣編碼"].ToString().Trim());
ROLE = 3;
}
}
}
}
在web項目中,通過一個頁面,使用Silverlight應用程序的XAP文件
傳遞參數方法如下:
<param name="initParams " value="root=<%=ROOT %>,role=<%=ROLE %> " />
上面的參數中傳遞你需要傳遞的鍵值對。
這樣我們的Silverlight應用程序SInfo就可以接受到參數了,怎么實現呢?這樣:
方法一:
在App.xaml.cs文件中的Application_StartUp事件中添加如下的代碼:
private void Application_Startup(object sender, StartupEventArgs e)
{
//第一種寫法
Dictionary <string, string> ppDic = new Dictionary<string, string>();
if (e.InitParams != null)
{
foreach (var item in e.InitParams)
{
ppDic.Add(item.Key.ToUpper(), item.Value);
}
}
this.RootVisual = new MainPage(ppDic);
}
然后再MainPage.xaml.cs的構造函數中就可以取得參數了:
public partial class MainPage : UserControl
{
//獲取參數,作為全局變量
public string root = null;
public string role = null;
//第一種獲取插件頁面傳遞過來的參數
public MainPage(Dictionary <string, string> paramsDic)
{
InitializeComponent();
if (paramsDic.TryGetValue( "ROOT", out root))
{
//在這里我們就能拿到root的值(測試用)
//MessageBox.Show(root);
}
if (paramsDic.TryGetValue( "ROLE", out role))
{
//在這里我們就能拿到role的值(測試用)
//MessageBox.Show(role);
}
}
方法二:在App.xaml.cs文件中的Application_StartUp事件中添加如下的代碼:
private void Application_Startup(object sender, StartupEventArgs e)
{
//第二種寫法
if (e.InitParams != null)
{
foreach (var item in e.InitParams)
{
this.Resources.Add(item.Key, item.Value);
}
}
this.RootVisual = new MainPage();
}
同樣在MainPage.xaml.cs的構造函數中就可以取得參數了:
//獲取頁面傳遞參數的通用方法,單獨抽取出來作為一個方法
private string GetParam(string p)
{
if (App.Current.Resources[p] != null)
{
return App.Current.Resources[p].ToString();
}
else
{
return string.Empty;
}
}
public MainPage()
{
InitializeComponent();
MessageBox.Show(GetParam( "root"));
MessageBox.Show(GetParam( "role"));
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:CSDN