public DynamicIndexMobileItemViewModel BuildMobileItemViewModel(DynamicEntityMetadata dynamicEntityMetadata, RouteValueDictionaryWrapper routeValueDictionaryWrapper, dynamic item) { var dynamicIndexMobileItemViewModel = new DynamicIndexMobileItemViewModel(); dynamicIndexMobileItemViewModel.ShowDelete = dynamicEntityMetadata.ShowDelete(); dynamicIndexMobileItemViewModel.ShowEdit = dynamicEntityMetadata.ShowEdit(); dynamicIndexMobileItemViewModel.ShowDetails = dynamicEntityMetadata.ShowDetails(); dynamicIndexMobileItemViewModel.Item = item; IEnumerable <DynamicPropertyIndexViewModel> properties = GetDynamicPropertyViewModels(dynamicEntityMetadata, item); var defaultpropertyName = dynamicEntityMetadata.DefaultProperty().PropertyName(); var defaultDynamicProperty = properties.SingleOrDefault(x => x.PropertyName == defaultpropertyName); var entityName = dynamicEntityMetadata.TypeName(); foreach (var dynamicPropertyIndexViewModel in properties.Where(x => x.PropertyName != defaultpropertyName).ToList()) { dynamicIndexMobileItemViewModel.DynamicPropertyIndexViewModels.Add(dynamicPropertyIndexViewModel); } if (defaultDynamicProperty != null) { dynamicIndexMobileItemViewModel.DefaultDynamicPropertyViewModel = defaultDynamicProperty; } dynamicIndexMobileItemViewModel.EntityName = entityName; dynamicIndexMobileItemViewModel.TypeName = dynamicEntityMetadata.TypeName(); var rv = routeValueDictionaryWrapper.Clone(); rv.SetValue("Id", dynamicEntityMetadata.KeyProperty().GetValueFunction()(item).ToString()); dynamicIndexMobileItemViewModel.RouteValueDictionaryWrapper = rv; return(dynamicIndexMobileItemViewModel); }
public dynamic ParseKeyType(dynamic id) { if (id.GetType() == typeof(String[])) //mvc model binder does not bind correctly with the dynamic data type in some cases { id = ((string[])id)[0]; } return(DynamicEntityMetadata.KeyProperty().ParseValue()(id.ToString())); }
public virtual ActionResult Delete(dynamic id, string returnUrl) { id = ParseKeyType(id); var model = _dynamicRepository.GetItem(EntityType, DynamicEntityMetadata.KeyProperty().PropertyName(), id); var viewModel = _dynamicDeleteViewModelBuilder.Build(DynamicEntityMetadata, model, returnUrl); return(View("DynamicDelete", viewModel)); }
/// <summary> /// ScopeIdentity can be used to allow the create a ReturnUrl that includes the primary key for an entity that has not been created yet. /// You should use ScopeIdentity instead of the id value. /// For example, you could have a create actionlink that returns to the edit page once the entity has been created. /// </summary> /// <param name="returnUrl">The ReturnUrl that may contain ScopeIdentity</param> /// <param name="dynamicEntityMetadata"></param> /// <param name="createModel"></param> /// <returns></returns> public string ReplaceScopeIdentity(string returnUrl, DynamicEntityMetadata dynamicEntityMetadata, dynamic createModel) { if (returnUrl.Contains("ScopeIdentity")) { var keyValue = dynamicEntityMetadata.KeyProperty().GetValueFunction()(createModel); returnUrl = returnUrl.Replace("ScopeIdentity", keyValue.ToString()); } return(returnUrl); }
public DynamicIndexItemViewModel BuildItemViewModel(DynamicEntityMetadata dynamicEntityMetadata, RouteValueDictionaryWrapper routeValueDictionaryWrapper, dynamic item) { var dynamicIndexItemViewModel = new DynamicIndexItemViewModel(); dynamicIndexItemViewModel.ShowDelete = dynamicEntityMetadata.ShowDelete(); dynamicIndexItemViewModel.ShowEdit = dynamicEntityMetadata.ShowEdit(); dynamicIndexItemViewModel.ShowDetails = dynamicEntityMetadata.ShowDetails(); dynamicIndexItemViewModel.Item = item; dynamicIndexItemViewModel.TypeName = dynamicEntityMetadata.TypeName(); var rv = routeValueDictionaryWrapper.Clone(); rv.SetValue("Id", dynamicEntityMetadata.KeyProperty().GetValueFunction()(item).ToString()); dynamicIndexItemViewModel.RouteValueDictionaryWrapper = rv; IEnumerable <DynamicPropertyIndexViewModel> properties = GetDynamicPropertyViewModels(dynamicEntityMetadata, item); foreach (var property in properties) { dynamicIndexItemViewModel.DynamicPropertyIndexViewModels.Add(property); } return(dynamicIndexItemViewModel); }