1. 程式人生 > >Silverlight利用Application_Startup獲取web專案中的初始化引數

Silverlight利用Application_Startup獲取web專案中的初始化引數

一個新建的silverlight專案在解決方案中往往有兩個專案,silverlight的本身專案和供其在瀏覽器中展現的Web專案,在web專案中有相應的web頁面提供給silverlight程式承載展現,那麼如何將web頁面的資料(比如系統所需的一些配置)傳遞到silverlight的程式中呢?在App.xaml.cs中的Application_Startup函式的引數StartupEventArgsInitParams 屬性為我們提供了這樣的一個實現。

一. 新建silverlight專案如下:


將web專案設為啟動項,InitParamsTestPage.html設為起始頁。

二. InitParamsTestPage.html程式碼(修改部分)

<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/InitParams.xap"/>
		  <param name="onError" value="onSilverlightError" />
		  <param name="background" value="white" />
		  <param name="minRuntimeVersion" value="5.0.61118.0" />
		  <param name="autoUpgrade" value="true" />
            <!-- 利用initParams屬性添加了三個引數-->
          <param name="initParams" value="IP=127.0.0.1,Port=8989,ServiceName=testName"  />

		  <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
 			  <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="獲取 Microsoft Silverlight" style="border-style:none"/>
		  </a>
	    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
    </form>
</body>

在上面的程式碼中,我們想initParams屬性中添加了IP, Port,ServiceName這三個引數,他們之前用逗號”,“分隔。

三. 在App.xaml.cs中獲取上面的引數並顯示

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            MainPage mP = new MainPage();
            mP.IpLab.Content = e.InitParams["IP"];
            mP.PortLab.Content = e.InitParams["Port"];
            mP.WsNameLab.Content = e.InitParams["ServiceName"];
            this.RootVisual = mP;
        }

可以看到,通過StartupEventArgs的InitParams屬性來傳遞的,實際上InitParams是一個Dictionary<string, string>型別的,所以可以直接使用 [] 獲取。

MainPage.xaml的顯示部分程式碼:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="InitParams.MainPage"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">

        <sdk:Label Content="IP:" HorizontalAlignment="Left" Height="20" Margin="79,75,0,0" VerticalAlignment="Top" Width="28"/>
        <sdk:Label Name="IpLab" Content="" HorizontalAlignment="Left" Height="20" Margin="133,75,0,0" VerticalAlignment="Top" Width="142"/>
        <sdk:Label Content="Port:" HorizontalAlignment="Left" Height="20" Margin="79,109,0,0" VerticalAlignment="Top" Width="28"/>
        <sdk:Label Name="PortLab" Content="" HorizontalAlignment="Left" Height="20" Margin="133,109,0,0" VerticalAlignment="Top" Width="142"/>
        <sdk:Label Content="Name:" HorizontalAlignment="Left" Height="20" Margin="79,147,0,0" VerticalAlignment="Top" Width="41" RenderTransformOrigin="0.832,2.653"/>
        <sdk:Label Name="WsNameLab" Content="" HorizontalAlignment="Left" Height="20" Margin="133,147,0,0" VerticalAlignment="Top" Width="142" RenderTransformOrigin="0.832,2.653"/>

    </Grid>
</UserControl>

四. 效果


可以看到成功獲取到我們在InitParamsTestPage.html頁面中配置好的引數。

五 . 擴充套件

我們在專案開發中往往將一些經常改變的引數配置在一個配置檔案中,這個方便統一管理,所以往往我們的配置資料都是從配置檔案中獲取的,這時我們就可以使用javascript來實現讀取我們的配置檔案中的資料並使用html元素的innerHTML屬性來動態設定引數;

InitParamsTestPage.html的程式碼修改為:

<!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" >

<head>
    <title>InitParams</title>
    <style type="text/css">
    html, body {
	    height: 100%;
	    overflow: auto;
    }
    body {
	    padding: 0;
	    margin: 0;
    }
    #silverlightControlHost {
	    height: 100%;
	    text-align:center;
    }
    </style>
    <script type="text/javascript" src="Silverlight.js"></script>
    <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";
            }

            throw new Error(errMsg);
        }

        function WindOnLoad() {
            var xmlDoc;
            var initParamsString = '';
            var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.load("ConfigParams.xml");

            if (xmlDoc == null) {
                alert('您的瀏覽器不支援xml檔案讀取,於是本頁面禁止您的操作,推薦使用IE5.0以上可以解決此問題!');
                window.location.href = '/Index.aspx';
                return;
            }
            var nodes = xmlDoc.getElementsByTagName("p");
            
            for (var i = 0; i < nodes.length; i++) {
                initParamsString += nodes[i].text;
                if (i != nodes.length) {
                    initParamsString += ",";
                }
            }

            SetInitParams(initParamsString);
        }
        function SetInitParams(initParamsString) {
            var silverlightControlHtml = ' <object id="silverlightControl" data="data:application/x-silverlight-2," type="application/x-silverlight-2"  width="100%" height="100%">';
            silverlightControlHtml += '<param name="source" value="ClientBin/InitParams.xap" />';
            silverlightControlHtml += '<param name="onerror" value="onSilverlightError" />';
            silverlightControlHtml += '<param name="minRuntimeVersion" value="5.0.61118.0" />';

            silverlightControlHtml += '<param id="InitParams" name="InitParams" value="' + initParamsString + '"/>';

            silverlightControlHtml += '</object>';
            silverlightControlHtml += '<iframe id="_sl_historyFrame" style="visibility: hidden; height: 0; width: 0; border: 0px"></iframe>';

            document.getElementById("silverlightControlHost").innerHTML = silverlightControlHtml;
        }
        window.onload = WindOnLoad;
    </script>
</head>
<body>
    <div id="silverlightControlHost">
        </div>
</body>
</html>
可以看到,我們添加了兩個javascript函式WindOnLoad,和SetInitParams分別用來讀取配置檔案和動態填寫html程式碼,最終的效果和上面的一樣。
然後需要新增一個配置檔案ConfigParams.xml:
<?xml version="1.0" encoding="utf-8" ?>
<Params>
  <p>IP=127.0.0.1</p>
  <p>Port=8989</p>
  <p>ServiceName=testName</p>
</Params>

執行效果:


相關推薦

Silverlight利用Application_Startup獲取web專案初始引數

一個新建的silverlight專案在解決方案中往往有兩個專案,silverlight的本身專案和供其在瀏覽器中展現的Web專案,在web專案中有相應的web頁面提供給silverlight程式承載展現,那麼如何將web頁面的資料(比如系統所需的一些配置)傳遞到silver

Web專案啟動初始監聽器如何獲取spring bean

我們在專案開發中可能會遇到這樣的需求,在專案啟動的時候我們通過web.xml配置載入一個監聽器,然後在監聽器中初始化我們專案中所需要的資料,那我們分析一下實現 1: 首先建立監聽器,實現javax.servlet.ServletContextListener public

專案初始通用執行緒池

說明:在專案初始階段,有的時候需要維護一個通用的執行緒池,用來非同步執行寫操作,不影響主執行緒。直接上程式碼吧! package com.fy.agent.api.config.thread; import org.springframework.conte

Servlet初始引數和上下文引數的配置

在Java Web開發中。常量資訊通常傾向於寫在配置檔案中。這樣需求變化時只需要修改一下配置檔案就可以了。而不用大量的改動程式碼並造成程式的重新編譯。web.xml提供了這種配置初始化引數的功能。 <servlet>     <servlet-name

web專案開發初始basePath

web專案中我們幾乎所有頁面都會有對靜態資源的引用,而所有引用都需要資源的地址,但是所有地址的前半部分都是相同的,所以我們可以把這部分叫做basePath,可以在專案啟動的時候獲取到專案的basePat

在過濾器獲取web.xml配置的初始引數

在過濾器中獲取在web.xml配置的初始化引數       例如 <filter>        <filter-name>cross-origin</filter-n

在spring web專案獲取WEB-INF/classes目錄與WEB-INF/目錄

場景:在spring web專案中獲取WEB-INF/classes目錄與WEB-INF/目錄  1.獲取WEB-INF/classes 目錄  /**1.獲取WEB-INF/classes 目錄 **/ public static String getW

如何獲取web專案hibernate.cfg.xml配置檔案的資料

有時候想要獲取hibernate.cfg.xml配置檔案中的資料,網路上有很多方法,有的很複雜,這裡我介紹一種很簡單的獲取方法。 hibernate.cfg.xml配置檔案中有連線資料庫所需的各種資訊,比如這裡要獲取connection.url欄位對應的url資料,如下所示

web專案獲取資源及資源路徑

public class PathServlet extends HttpServlet {     public void doGet(HttpServletRequest request, HttpServletResponse response)           

getResourceAsStream()在web專案獲取不到配置檔案的原因

問題:使用Object.class.getResourceAsStream()在web專案中獲取不到配置檔案,單純java應用程式測試卻可以,放在web專案中就報空指標。 1.先放出來目錄 2.java應用程式測試沒有問題 3.當放入web專案執行後直接顯示

如何通過Servlet獲取定義在web.xml初始引數

先理一理大致的流程,我們的目的是客戶端通過jsp頁面請求web.xml中的資料。 首先,我們得在web.xml中定義初始化資料吧,不然使用者就要請求空資料了。 那麼,說到web.xml,究竟是個什麼玩意呢?我也不是很清楚,也沒怎麼了解。 我只知道它是一個和

Servlet(3)ServletConfig介面的介紹(獲取web.xml某個Servlet初始配置引數

什麼是ServletConfig? 當web容器在建立servlet例項物件時,可以給每一個servlet設定初始化資訊,而這些初始化資訊會被自動封裝到ServletConfig中。 當在呼叫servlet的init方法時,會將ServletConfig物件傳遞給serv

Jfinal web專案 利用JAX-WS釋出webService 返回json字串

一、編寫java程式碼 import java.util.List; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.servlet.http.HttpServle

關於WEB專案java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver

環境: MyEclipse  9.0 Tomcat 6.x 今天一直在除錯一個問題: java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver  很納悶,

JAVA web專案的no result defined for action xxxAction and result input 錯誤

No result defined for action and result input 產生這個錯誤的原因:Action中的屬性值為空的時候,Struts2的預設攔截器會報錯,但是又找不到input的Result,不能夠把錯誤返回,所以報這種錯誤。 從上面可知,能夠導致 No r

怎麼獲取web專案的webroot根目錄下面的資料夾的路徑?

在servlet裡面 : //把路徑儲存為圖片 String path=request.getSession().getServletContext().getRealPath("/WebRoot/picture/role.png") ; System.out.println(path)

Web專案配置Spring的IOC容器

如果需要在Web專案中使用Spring的IOC容器,可以在Web專案配置檔案web.xml中做出如下配置: <listener> <listener-class>org.springframework.web.context.Contex

如何在Web專案配置Spring的IOC容器?

如何在Web專案中配置Spring的IOC容器? 如果需要在Web專案中使用Spring的IOC容器,可以在Web專案配置檔案web.xml中做出如下配置: <listener> <listener-class>org.springframework.w

專案啟動初始資料到記憶體

有一部分資料庫資料需要在專案啟動時就載入到記憶體中,以減少資料庫互動次數.降低伺服器和資料庫壓力. 可以利用物件初始化靜態變數時,賦予資料庫的資料,已ueser表為例 1、資料庫互動的Mapper,獲取資料庫資訊 public interface UserMapper { @M

web專案圖示的前端處理方案

工程中用到圖示是常事,那這些圖示我們前端一般是怎麼解決的呢?這幾種方案有什麼優缺點呢? 第一種: SVG Sprite SVG sprite其實就是svg的集合。SVG即可縮放向量圖形 (Scalable Vector Graphics)的簡稱,是一種用來描述二維向量圖形的XML標記語言。SVG圖形不依賴