编程开发 > ASP > 文章内容

在ASP.NETMVC中对表进行通用的增删改(四)

2010-11-3编辑:dan

这个typeof(TModel)造成了只会更新声明类型中有的属性,把它换成model.GetType()就可以解决问题了,我扩这的这个方法如下

public static class ControllerExtension
    {
        /// <summary>
        /// 更新时是否按照当前类型进行更新
        /// </summary>
        /// <typeparam name="TModel"></typeparam>
        /// <param name="controller"></param>
        /// <param name="model"></param>
        /// <param name="isEx"></param>
        public static void UpdateModel<TModel>(this Controller controller, TModel model, bool isExtension) where TModel : class
        {
            if (isExtension)
            {
                Predicate<string> propertyFilter = propertyName => IsPropertyAllowed(propertyName, null, null);
                IModelBinder binder = ModelBinders.Binders.GetBinder(model.GetType());

                ModelBindingContext bindingContext = new ModelBindingContext()
                {
                    Model = model,
                    ModelName = null,
                    ModelState = controller.ModelState,
                    ModelType = model.GetType(),
                    PropertyFilter = propertyFilter,
                    ValueProvider = controller.ValueProvider
                };
                binder.BindModel(controller.ControllerContext, bindingContext);

            }
            else
            {
                throw new Exception("isExtension不能选择false");
            }
        }
        private static bool IsPropertyAllowed(string propertyName, string[] includeProperties, string[] excludeProperties)
        {
            bool includeProperty = (includeProperties == null) || (includeProperties.Length == 0) || includeProperties.Contains(propertyName, StringComparer.OrdinalIgnoreCase);
            bool excludeProperty = (excludeProperties != null) && excludeProperties.Contains(propertyName, StringComparer.OrdinalIgnoreCase);
            return includeProperty && !excludeProperty;
        }
    }

有了这些,当我们想对新表进行编辑和添加时只需要添加相应的Partial编辑视图就可以了,简化了我们的编程工作。

四、缺点

1、须要按照规则命名,比方说Partial视图需要以相应的类名来命名

2、页面引用是弱类型的

五、源码下载

在ASP.NETMVC中对表进行通用的增删改(三)

热点推荐

登录注册
触屏版电脑版网站地图