public Task BindModelAsync(ModelBindingContext bindingContext) { bindingContext.ThrowIfNull(nameof(bindingContext)); object model; if (bindingContext.HttpContext.Request.QueryString.HasValue) { var queryStringParameters = bindingContext.HttpContext .Request .Query .ToDictionary(pair => pair.Key, pair => pair.Value.ToString()); var jsonString = JsonConvert.SerializeObject(queryStringParameters); var settings = new JsonSerializerSettings { ContractResolver = new CustomResolver() }; model = JsonConvert.DeserializeObject(jsonString, bindingContext.ModelType, settings); } else { model = Activator.CreateInstance(bindingContext.ModelType); } BindRouteDataToModel(bindingContext, model); bindingContext.Model = model; bindingContext.Result = ModelBindingResult.Success(bindingContext.Model); return(Task.CompletedTask); }
public Task BindModelAsync(ModelBindingContext bindingContext) { bindingContext.ThrowIfNull(nameof(bindingContext)); IViewModel model = null; ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); //value is n if (!value.Any()) { return(null); } var passedModel = value; if (passedModel != null && bindingContext.ModelType.IsAssignableFrom(passedModel.GetType())) { //route already available and of the correct type so return it. return(null); } string modelData = string.IsNullOrEmpty(passedModel.FirstValue) ? "/" : passedModel.FirstValue; //return null if modeldata is not set. if (modelData == null) { return(null); } //generate a Cache key for the current model. //try to get model out of HttpContext.Items[], incase the same model is request multiple times during //a single request. string key = MODEL_KEY_FORMAT.FormatString(modelData); //model = bindingContext.HttpContext.Items[key] as IViewModel; if (model == null) { model = modelData.StartsWith("tcm:") ? _contentProvider.BuildViewModel(new TcmUri(modelData)) : _contentProvider.BuildViewModel(modelData); if (model != null && !bindingContext.ModelType.IsAssignableFrom(model.GetType())) { //Model is incorrect, so remove model = null; } bindingContext.HttpContext.Items[key] = model; } //if (model is IRenderable) // controllerContext.RouteData.DataTokens["area"] = ((IRenderable)model).MvcData.Area; //Todo: WTF... this doesn't make sense; Bug in Microsoft.AspNetCore.Mvc??? bindingContext.Result = ModelBindingResult.Success(model); //Todo: implemenet async return(Task.FromResult(ModelBindingResult.Success(model))); }
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { bindingContext.ThrowIfNull("BindingContext"); controllerContext.ThrowIfNull("ControlContext"); var request = controllerContext.HttpContext.Request; WordList list = WordListConfig.Lists[WordListConfig.ENGLISH_AS_A_SECOND_LANGUAGE]; var board = Board.InitiliseBoard(list); for (int row = Board.BOARD_START_INDEX; row <= Board.BOARD_END_INDEX; row++) { for (int column = Board.BOARD_START_INDEX; column <= Board.BOARD_END_INDEX; column++) { string letter = GetA <string>(bindingContext, string.Format("[{0}][{1}].Cell.Letter", row, column)); if (!letter.IsNullOrEmpty()) { board.GetCell(column, row).Letter = letter[0]; } } } return(new BoardModel(board, list)); }
public Task BindModelAsync(ModelBindingContext bindingContext) { bindingContext.ThrowIfNull(); var modelName = bindingContext.ModelName; var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName); if (valueProviderResult == ValueProviderResult.None) { return(Task.CompletedTask); } var value = valueProviderResult.FirstValue; if (string.IsNullOrEmpty(value)) { return(Task.CompletedTask); } bindingContext.Result = ModelBindingResult.Success(value.Trim()); return(Task.CompletedTask); }
public Task BindModelAsync(ModelBindingContext bindingContext) { bindingContext.ThrowIfNull(nameof(bindingContext)); ISitemapItem model = null; //navType & navLevels are set on the 'RouteData' Metadata field on the component template. //and passed as routeparameters to the action. string navType = null; int navLevels = 0; int navStartLevel = -1; ValueProviderResult value = bindingContext.ValueProvider.GetValue("navType"); ValueProviderResult navLevelsResult = bindingContext.ValueProvider.GetValue("navLevels"); ValueProviderResult navStartLevelResult = bindingContext.ValueProvider.GetValue("navStartLevel"); if (value.Any()) { navType = value.FirstValue; } string requestUrlPath = bindingContext.HttpContext.Request.Path.Value; ////Filename should be removed. the data published from Tridion doesnt include the filename into the url's ////i.e. for url '/product/index.html' published content from Tridion contains: '/products/' //var fileName = Path.GetFileName(requestUrlPath); //if (!fileName.IsNullOrEmpty()) // requestUrlPath = requestUrlPath.Replace(fileName, string.Empty); if (navLevelsResult.Any()) { int.TryParse(navLevelsResult.FirstValue, out navLevels); } if (navStartLevelResult.Any()) { int.TryParse(navStartLevelResult.FirstValue, out navStartLevel); } //generate a Cache key for the current model. //try to get model out of HttpContext.Items[], incase the same model is request multiple times during //a single request. string key = MODEL_KEY_FORMAT.FormatString(navType, requestUrlPath, navLevels, navStartLevel); model = bindingContext.HttpContext.Items[key] as ISitemapItem; if (model == null) { switch (navType?.ToLower()) { case "children": model = _navigationProvider.GetChildren(requestUrlPath, navLevels, navStartLevel); break; case "path": model = _navigationProvider.GetPath(requestUrlPath); break; default: model = _navigationProvider.GetAll(navLevels); break; } bindingContext.HttpContext.Items[key] = model; } //Todo: WTF... this doesn't make sense; Bug in Microsoft.AspNetCore.Mvc??? bindingContext.Result = ModelBindingResult.Success(model); //Todo: implemenet async return(Task.FromResult(ModelBindingResult.Success(model))); }