public async Task <JsonResult> EditTag(string TagToAdd, int[] TagToDel, int BlogID) { var TagsToAdd = TagUtil.SplitTags(TagToAdd); if (TagsToAdd.Any(t => t.Length > 20)) { return(Json(new { errmsg = "标签不得超过20字符" })); } else { Blog b = _db.Blogs.Find(BlogID); if (b == null || BlogID <= 0 || (b.option != null && b.option.LockTags)) { return(Json(new { errmsg = "无效id,请刷新重试" })); } var tibs = await _db.TagsInBlogs.Include(tib => tib.tag).Where(t => t.BlogID == BlogID).ToListAsync(); // Remove TagToAdd items from TagsToDel var TagsToDel = TagToDel == null ? new TagsInBlog[0] : tibs.Where(tib => TagToDel.Contains(tib.TagID) && !TagsToAdd.Contains(tib.tag.TagName, SqlStringComparer.Instance)).ToArray(); // Remove already exist tags from TagsToAdd TagsToAdd = TagsToAdd.Where(s => tibs.All(tib => !SqlStringComparer.Instance.Equals(tib.tag.TagName, s))).ToArray(); if (tibs.Any(tib => !tib.IsRemovable(b.Author, User.Identity.Name, _blogUtil.CheckAdmin(), HarmonySettings.BlacklistTags) && TagToDel.Contains(tib.TagID))) { return(Json(new { errmsg = "您不能删除作者添加的或黑名单标签" })); } if (tibs.Count + TagsToAdd.Length - TagsToDel.Length > 10) { return(Json(new { errmsg = "标签不得超过10个" })); } else if (tibs.Count + TagsToAdd.Length - TagsToDel.Length < 1) { return(Json(new { errmsg = "请至少添加一个标签" })); } List <Tag> AddedTags = _tagUtil.AddTagsForBlog(BlogID, TagsToAdd, User.Identity.Name); _db.TagHistories.AddRange(TagsToDel.Select(tib => new TagHistory { AddBy = tib.AddBy, BlogID = BlogID, DeleteBy = User.Identity.Name, TagName = tib.tag.TagName, Time = DateTime.Now })); _db.TagsInBlogs.RemoveRange(TagsToDel); bool isHarmony = BlogHelper.BlogIsHarmony(_db, b, HarmonySettings); if (isHarmony != b.isHarmony) { b.isHarmony = isHarmony; _cacheService.ClearHPCache(this, null); } await _db.SaveChangesAsync(); var currentTags = tibs.Except(TagsToDel).Select(tib => tib.tag).Concat(AddedTags).OrderBy(t => t.TagName); TriggerEditTags(b, currentTags); return(Json(AddedTags.ToDictionary(t => t.TagID.ToString(), t => t.TagName))); } }