Ejemplo n.º 1
0
        /// <summary>
        /// Populates the view model from the data received from the request.
        /// </summary>
        /// <returns></returns>
        public void PopulateViewModel(IDotvvmRequestContext context, string serializedPostData)
        {
            // get properties
            var data           = context.ReceivedViewModelJson = JObject.Parse(serializedPostData);
            var viewModelToken = (JObject)data["viewModel"];

            // load CSRF token
            context.CsrfToken = viewModelToken["$csrfToken"].Value <string>();

            ViewModelJsonConverter viewModelConverter;

            if (viewModelToken["$encryptedValues"] != null)
            {
                // load encrypted values
                var encryptedValuesString = viewModelToken["$encryptedValues"].Value <string>();
                viewModelConverter = new ViewModelJsonConverter(context.IsPostBack, viewModelMapper, JObject.Parse(viewModelProtector.Unprotect(encryptedValuesString, context)));
            }
            else
            {
                viewModelConverter = new ViewModelJsonConverter(context.IsPostBack, viewModelMapper);
            }

            // get validation path
            context.ModelState.ValidationTargetPath = data["validationTargetPath"].Value <string>();

            // populate the ViewModel
            var serializer = CreateJsonSerializer();

            serializer.Converters.Add(viewModelConverter);
            try
            {
                viewModelConverter.Populate(viewModelToken, serializer, context.ViewModel);
            }
            catch (Exception ex)
            {
                throw new Exception($"Could not deserialize viewModel of type { context.ViewModel.GetType().Name }. {GeneralViewModelRecommendations}", ex);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Populates the view model from the data received from the request.
        /// </summary>
        /// <returns></returns>
        public void PopulateViewModel(DotvvmRequestContext context, string serializedPostData)
        {
            // get properties
            var data           = context.ReceivedViewModelJson = JObject.Parse(serializedPostData);
            var viewModelToken = (JObject)data["viewModel"];

            // load CSRF token
            context.CsrfToken = viewModelToken["$csrfToken"].Value <string>();

            ViewModelJsonConverter viewModelConverter;

            if (viewModelToken["$encryptedValues"] != null)
            {
                // load encrypted values
                var encryptedValuesString = viewModelToken["$encryptedValues"].Value <string>();
                viewModelConverter = new ViewModelJsonConverter(context.IsPostBack, JObject.Parse(viewModelProtector.Unprotect(encryptedValuesString, context)));
            }
            else
            {
                viewModelConverter = new ViewModelJsonConverter(context.IsPostBack);
            }

            // get validation path
            context.ModelState.ValidationTargetPath = data["validationTargetPath"].Value <string>();

            // populate the ViewModel
            var serializer = CreateJsonSerializer();

            serializer.Converters.Add(viewModelConverter);
            viewModelConverter.Populate(viewModelToken, serializer, context.ViewModel);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Populates the view model from the data received from the request.
        /// </summary>
        /// <returns></returns>
        public void PopulateViewModel(IDotvvmRequestContext context, string serializedPostData)
        {
            // get properties
            var     data = context.ReceivedViewModelJson = JObject.Parse(serializedPostData);
            JObject viewModelToken;

            if (data["viewModelCacheId"] != null)
            {
                if (!context.Configuration.ExperimentalFeatures.ServerSideViewModelCache.IsEnabledForRoute(context.Route.RouteName))
                {
                    throw new InvalidOperationException("The server-side viewmodel caching is not enabled for the current route!");
                }

                viewModelToken    = viewModelServerCache.TryRestoreViewModel(context, (string)data["viewModelCacheId"], (JObject)data["viewModelDiff"]);
                data["viewModel"] = viewModelToken;
            }
            else
            {
                viewModelToken = (JObject)data["viewModel"];
            }

            // load CSRF token
            context.CsrfToken = viewModelToken["$csrfToken"]?.Value <string>();

            ViewModelJsonConverter viewModelConverter;

            if (viewModelToken["$encryptedValues"] != null)
            {
                // load encrypted values
                var encryptedValuesString = viewModelToken["$encryptedValues"].Value <string>();
                viewModelConverter = new ViewModelJsonConverter(context.IsPostBack, viewModelMapper, context.Services, JObject.Parse(viewModelProtector.Unprotect(encryptedValuesString, context)));
            }
            else
            {
                viewModelConverter = new ViewModelJsonConverter(context.IsPostBack, viewModelMapper, context.Services);
            }

            // get validation path
            context.ModelState.ValidationTargetPath = data.SelectToken("additionalData.validationTargetPath")?.Value <string>();

            // populate the ViewModel
            var serializer = CreateJsonSerializer();

            serializer.Converters.Add(viewModelConverter);
            try
            {
                viewModelConverter.Populate(viewModelToken.CreateReader(), serializer, context.ViewModel);
            }
            catch (Exception ex)
            {
                throw new Exception($"Could not deserialize viewModel of type { context.ViewModel.GetType().Name }. {GeneralViewModelRecommendations}", ex);
            }
        }