Как передать «пользовательский» объект из aspx в silverlight 4 - PullRequest
2 голосов
/ 28 декабря 2010

Во-первых, мы ограничены использованием существующей веб-инфраструктуры, которая обрабатывает аутентификацию и авторизацию.Веб-проект использует аутентификацию форм и записывает в зашифрованный файл cookie.Информация о пользователях отображается на страницах aspx как свойство:LoggedInUser.Current У этого есть несколько свойств, включая userId и список ролей.

Я смотрел на использование initParams, но там не очень успешно (правка: изначально я не мог сделать это динамически).Я создал простой объект POCO с атрибутом [Key], но мне нужно, по крайней мере, иметь возможность передавать userId со страницы aspx на встроенный silverlight.

Какой самый простой способ передатьдинамический объект от aspx до silverlight 4?

Спасибо, slugster:

Настройте initParams на странице aspx<param name="initParams" value="<%=InitParam%>"/>в коде:

private void LoadSilverlightParams()
    {
        LoggedInUser user = LoggedInUser.Current;
        InitParam = "UserId=" + user.PersonId.ToString() + ",";
        InitParam += "OrganizationId=" + user.OrganizationId.ToString() + ",";
        InitParam += "RoleList=";
        foreach(string s in user.Roles)
        {
            InitParam += s + "|";
        }
        InitParam.Remove(InitParam.Count() - 1);
    }

(не красиво, но работает). Затем использовал пример Slugster для использования значений на стороне Silverlight.

Предупреждение: передача пользовательской информации с помощью параметров init открываетИнформация в виде простого текста для пользователя, просматривающего страницу (они просто должны просмотреть источник).В итоге мы использовали службу домена аутентификации и тот же пользовательский объект, что и aspx

Ответы [ 2 ]

0 голосов
/ 28 декабря 2010

У вас есть 3 основных варианта:

  • использовать параметр initParams плагина объекта Silverlight
  • использовать мост Silverlight-javascript для доступа к значениям, хранящимся в части страницы aspx
  • используйте вызов веб-службы WCF (или asmx) для получения необходимой информации

С помощью initParams вы отправляете через список значений, разделенных запятыми, который становится доступным в качестве параметра StartupEventArgs набора ключ / значение в части Application_Startup элемента управления Silverlight. Затем вы можете просто проверить наличие определенного ключа и затем повторно гидрировать объект данных с найденными значениями:

private void Application_Startup(object sender, StartupEventArgs e)
{
    if (e.InitParams != null && e.InitParams.Count > 0)
    {
        foreach (string key in e.InitParams.Keys)
        {
            switch (key.ToLower())
            {
                case "user":
                    MyAppDetails.UserId = int.Parse(e.InitParams["user"]);
                    break;

                case "year":
                    MyAppDetails.SelectedYear = int.Parse(e.InitParams["year"]);
                    break;

                case "userlogonname":
                    MyAppDetails.UserLogonName = e.InitParams["userlogonname"];
                    break;

                case "currentyear":
                    MyAppDetails.CurrentYear = int.Parse(e.InitParams["currentyear"]);
                    break;

                case "debuglevel":
                    MyAppDetails.DebugLevel = (AppDebugLevel)int.Parse(e.InitParams["debuglevel"] ?? "1");
                    break;

                case "uitheme":
                    MyAppDetails.UITheme = e.InitParams["uitheme"];
                    break;

            }
        }

    }

    this.RootVisual = new MainPage();
}

(MyAppDetails - глобально доступный (в приложении SL) статический объект). Используя этот метод, я могу динамически заполнять initParams во время выполнения на странице aspx.

Несколько ссылок, с которых можно начать, - это несколько моих предыдущих ответов здесь и здесь , а также ответ на мой собственный вопрос по этой же теме давным-давно здесь (этот ответ больше ориентирован на стиль ведения дел WCF).

0 голосов
/ 28 декабря 2010

В конструкторе объекта запуска вашего приложения silverlight вы можете прочитать строку запроса на странице aspx, на которой размещено приложение silverlight.

Таким образом, вы можете передать идентификатор через строку запроса, а затем использовать этот идентификатор для вызова службы wcf, которая возвратит ваш POCO или любой объект, который вы можете сериализовать через провод.

пример получения строки запроса показан ниже.

string val = System.Windows.Browser.HtmlPage.Document.QueryString["id"];

Надеюсь, это поможет

...