public SubmitResult SetViewParams(ViewParamsSetter setter) { var ps = new List <Page>(); if (setter.PageName != null) { ps = Repository.Find(d => d.TenantId == setter.TenantId && d.Name == setter.PageName); } else if (setter.TemplateName != null) { ps = Repository.Find(d => d.TenantId == setter.TenantId && d.PageCategory.Name == setter.TemplateName); } else { throw new ArgumentException("PageName or TemplateName must be provided"); } if (!ps.Any()) { throw new ArgumentOutOfRangeException("not found"); } foreach (var p in ps) { var vp = new ViewParams(); if (p.ViewParams != null) { vp = p.ViewParams.FromJson <ViewParams>(); } if (vp.Other == null) { vp.Other = new Dictionary <string, string>(); } if (setter.Fields != null) { vp.Fields = setter.Fields; } foreach (var kv in setter.Data) { if (kv.Key.ToLower().StartsWith("other.")) { string key = kv.Key.GetAfterFirst("."); if (kv.Value.ToLower() == "default") { vp.Other.Remove(key); } else { vp.Other[key] = kv.Value; } } else { var prop = typeof(ViewParams).GetProperty(kv.Key); if (prop != null) { prop.SetValue(vp, kv.Value); } } } p.ViewParams = vp.ToJson(); } return(Unit.SaveChanges()); }