예제 #1
0
        public static VMCampTopicShow  GetTopic(Guid id)
        {
            using (var db = new GarfielderEntities())
            {
                var dbm = db.Topics.Single(x => x.Id == id);
                if (dbm == null)
                {
                    return(null);
                }
                var vm = new VMCampTopicShow();
                vm.Id          = dbm.Id;
                vm.Title       = dbm.Title;
                vm.Slug        = dbm.Slug;
                vm.Url         = dbm.Url;
                vm.Grade       = dbm.Grade;
                vm.Description = dbm.Description;
                vm.ContentX    = dbm.ContentX;
                vm.Logo        = dbm.Logo;

                vm.Groups = dbm.Groups.ToList();

                vm.Tags = dbm.Tags.ToList();

                //vm.Attachments = dbm.XFiles.ToList();

                return(vm);
            };
        }
        [HttpPost, ValidateInput(false)]/* TODO:MVC3正式版时可以将ValidateInput注释掉,因为ContentX有AllowHtml属性 */
        public ActionResult EditTopic(VMCampTopicShow obj)
        {
            if (this.ModelState.IsValid)
            {
                var dbm = default(Topic);
                using (var db = new GarfielderEntities())
                {
                    if (obj.IsNew)
                    {
                        obj.CreateAt  = DateTime.Now;
                        obj.Id        = Guid.NewGuid();
                        dbm           = new Topic();
                        dbm.CreatedAt = dbm.PublishedAt = obj.CreateAt;
                        dbm.Published = true;
                        dbm.Id        = obj.Id;
                        db.AddToTopics(dbm);
                    }
                    else
                    {
                        dbm = db.Topics.SingleOrDefault(x => x.Id == obj.Id);
                        if (dbm == null)
                        {
                            obj.Error = true;
                            obj.Msg   = string.Format("Topic with id [{0}] has been deleted!", obj.Id);
                            return(View(obj));
                        }
                    }
                    dbm.Title    = obj.Title;
                    dbm.ContentX = obj.ContentX;

                    dbm.Slug        = string.IsNullOrWhiteSpace(obj.Slug) ? obj.Title.CHSToPinyin("-") : obj.Slug.CHSToPinyin("-");
                    dbm.Description = dbm.ContentX;
                    //save to db
                    var msg = Topic.ValidateSlug(dbm.Slug, db);
                    dbm.Slug       = msg.Context["Slug"].ToString();
                    dbm.ModifiedAt = DateTime.Now;

                    obj.Logo = dbm.Logo;

                    db.Attach(CurrentUser);
                    dbm.User = CurrentUser;
                    db.SaveChanges();

                    //tags
                    if (obj.TagID != null && obj.TagID.Count > 0)
                    {
                        dbm.Tags.Clear();

                        obj.TagID.ForEach(x => dbm.Tags.Add(db.Tags.Single(y => y.Id.Equals(x))));
                    }
                    //groups
                    if (obj.GroupID != null && obj.GroupID.Count > 0)
                    {
                        dbm.Groups.Clear();

                        obj.GroupID.ForEach(
                            x => dbm.Groups.Add(db.Groups.Single(y => y.Id.Equals(x)))
                            );
                    }
                    //保存关系表

                    db.SaveChanges();

                    //update tags and groups
                    obj.Groups = dbm.Groups.ToList();
                    obj.Tags   = dbm.Tags.ToList();
                }//using
            }
            ;
            return(View(obj));
        }//edit topic