2011-04-07 49 views
1

我看到有关于此主题的类似帖子,但没有回答我的问题。我正在导航到silverlight页面,我需要将值传递给页面。出于安全原因,我不能使用查询字符串。Silverlight查询字符串替代

有什么替代方案?当您导航到新页面

感谢

+1

为什么这被认为是不安全的?你能加密querstring的值,然后在页面上解密它们吗?请详细说明。 – 2011-04-07 19:53:29

+1

从另一个Silverlight页面或HTML页面到Silverlight页面? – 2011-04-07 20:26:56

+0

它不安全,因为我传递一个ID值:如果我将它传递给查询字符串,它可以由用户更改并使用它导航到其他数据。该值源于我的视图模型,然后将其视为Silverlight页面。 – Greg 2011-04-08 10:01:27

回答

1

你c只需将其添加到可在视图之间共享的应用程序上下文对象。我在当前的项目中使用这种方法,例如所以

CurrentUserContext = ApplicationContext.Instance().UserContext 

,可从一个视图导航到另一个之前简单地填充在可以随后通过其他视图中检索ApplicationContext的对象相关共享属性:

public class ApplicationContext 
    { 

     #region Declarations 

     // Static instance of the application class. 
     private static ApplicationContext _instance; 

     #endregion 

     #region Constructor 

     public ApplicationContext() 
     { 
     } 

     // Static instance creator. 
     public static ApplicationContext Instance() 
     { 
      if (_instance == null) 
      { 
       _instance = new ApplicationContext(); 
      } 
      return _instance; 
     } 

     //Shared properties e.g. Is available between all views 
     public SecurityContext UserContext { get; set; } 
    } 

若要从视图中使用。

+0

太好了 - 那正是我在找的东西。谢谢Myles J – Greg 2011-04-22 18:10:10

0

你可以存储在Web服务器上的值(通过您的RIA的数据模型,或交在你喜欢的任何方式),然后请求值。

+0

我不能这样做,因为它的用户在前一页选择的值 – Greg 2011-04-08 10:03:38

+0

当然可以。您可以在UI中选择它时发布该值(如果有帮助,请考虑使用AJAX)。 – 2011-04-08 17:38:56

+0

我的印象是,传递值可以全部在客户端完成,而无需返回服务器? – Greg 2011-04-10 12:55:21

1

你可以使用InitParams。 ////在ASPX设置 “/>

私人无效Application_Startup(对象发件人,StartupEventArgs E) { 变种COLL = e.InitParams; }

+0

我不能使用InitParams,因为值根据用户选择而改变 – Greg 2011-04-08 10:02:51

0

如果它的之间silverlight的意见,那么你可以有一些静态数据包来传递数据。This post关于如何在Silverlight中进行HTTP Post也可能对你有所帮助。

+0

我尝试过使用NavigationFramework来隐藏URL,但我在XAML中收到错误:错误说明了? char无效? – Greg 2011-04-08 10:04:51

+0

Greg 2011-04-08 10:05:50

+0

使用*双引号* **“**,而不是单引号**'。**。 – AbdouMoumen 2011-04-10 10:00:41