private static void UpdateModel(ListViewModel listViewModel, ControllerContext controllerContext, string[] includeProperties, string[] excludeProperties) { var modelBindingContext = new ModelBindingContext { ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => listViewModel, listViewModel.GetType()), ValueProvider = ValueProviderFactories.Factories.GetValueProvider(controllerContext), ModelState = listViewModel.ModelState, PropertyFilter = propertyName => IsPropertyAllowed(propertyName, includeProperties, excludeProperties), }; ModelBinders.Binders.GetBinder(typeof(ListViewModel)).BindModel(controllerContext, modelBindingContext); }
public ListViewModel GetListViewModelForType(Type type, ControllerContext controllerContext, ListViewModelOptions options) { var urlHelper = new UrlHelper(controllerContext.RequestContext); var listViewModel = new ListViewModel {Columns = listColumnProvider.GetColumnsForType(type, controllerContext)}; UpdateModel(listViewModel, controllerContext, options.ListViewModelIncludeProperties, options.ListViewModelExcludeProperties); if(options.RenderOptions != null) listViewModel.RenderOptions = options.RenderOptions; listViewModel.SearchUrl = urlHelper.Action(options.SearchAction, new {listViewModel.SortBy, listViewModel.SortDirection}); listViewModel.TitleViewName = ViewEngines.Engines.FindPartialViewOrDefault(controllerContext, options.TitleViewName, options.DefaultTitleViewName); listViewModel.ButtonsViewName = ViewEngines.Engines.FindPartialViewOrDefault(controllerContext, options.ButtonsViewName, options.DefaultButtonsViewName); listViewModel.PagerViewName = ViewEngines.Engines.FindPartialViewOrDefault(controllerContext, options.PagerViewName, options.DefaultPagerViewName); listViewModel.RowsViewName = ViewEngines.Engines.FindPartialViewOrDefault(controllerContext, options.RowsViewName, options.DefaultRowsViewName); listViewModel.SearchViewName = ViewEngines.Engines.FindPartialViewOrDefault(controllerContext, options.SearchFormViewName, options.DefaultSearchFormViewName); listViewModel.Title = options.Title ?? GetDefaultTitle(controllerContext.Controller); listViewModel.Subtitle = options.Subtitle; return listViewModel; }
public void Setup() { form = new NameValueCollection(); columns = new ListColumns(); listViewModel = new ListViewModel {Columns = columns}; httpContext = new MockHttpContext(); ((MockHttpRequest)httpContext.Request).SetForm(form); controllerContext = new ControllerContext(); controllerContext.HttpContext = httpContext; ValueProviderFactories.Factories .ReplaceWith<HttpFileCollectionValueProviderFactory>(ctx => ctx.HttpContext.Request.Form) .ReplaceWith<FormValueProviderFactory>(ctx => ctx.HttpContext.Request.Form) .ReplaceWith<QueryStringValueProviderFactory>(ctx => ctx.HttpContext.Request.QueryString); bindingContext = new ModelBindingContext { ModelMetadata = ModelMetadata.FromLambdaExpression(parameter => parameter, new ViewDataDictionary<ListViewModel>(listViewModel)) }; binder = new ListViewModelBinder(); }