private string GetHtmlModelString(HtmlTagBase Tag, string DataType) { int hidden = 0; string Data = ""; string format = ""; switch (Tag.TagType) { case Easy.HTML.HTMLEnumerate.HTMLTagTypes.Input: { format = (Tag as TextBoxHtmlTag).DateFormat; break; } case Easy.HTML.HTMLEnumerate.HTMLTagTypes.DropDownList: { var dropTag = Tag as DropDownListHtmlTag; if (dropTag.SourceType == SourceType.ViewData && DropDownOptions.ContainsKey(Tag.Name)) { dropTag.DataSource(DropDownOptions[Tag.Name]); } Data = dropTag.GetOptions(); DataType = "Select"; break; } case Easy.HTML.HTMLEnumerate.HTMLTagTypes.MutiSelect: { var muliTag = Tag as MutiSelectHtmlTag; if (muliTag.SourceType == SourceType.ViewData && DropDownOptions.ContainsKey(Tag.Name)) { muliTag.DataSource(DropDownOptions[Tag.Name]); } Data = muliTag.GetOptions(); DataType = "Select"; break; } case Easy.HTML.HTMLEnumerate.HTMLTagTypes.File: DataType = "None"; break; case Easy.HTML.HTMLEnumerate.HTMLTagTypes.PassWord: DataType = "None"; break; case HTML.HTMLEnumerate.HTMLTagTypes.Hidden: hidden = 1; break; default: break; } if (!Tag.Grid.Searchable) { DataType = "None"; } if (!Tag.Grid.Visiable) { hidden = 1; } Tag.DisplayName = string.IsNullOrEmpty(Tag.DisplayName) ? Tag.Name : Tag.DisplayName; StringBuilder columnBuilder = new StringBuilder(); columnBuilder.AppendFormat("{0}:{{", Tag.Name); columnBuilder.AppendFormat("DisplayName:'{0}',", Tag.DisplayName.Replace("\"", "\\\"").Replace("\'", "\\\'")); columnBuilder.AppendFormat("Name:'{0}',", Tag.Name); columnBuilder.AppendFormat("Width:{0},", Tag.Grid.ColumnWidth); columnBuilder.AppendFormat("DataType:'{0}',", DataType); columnBuilder.AppendFormat("Format:'{0}',", format); columnBuilder.AppendFormat("Hidden:{0},", hidden); columnBuilder.AppendFormat("Data:\"{0}\"", Data); columnBuilder.Append("},"); return(columnBuilder.ToString()); }
public static string ConvertToUbb(string htmlContent, ContentConvert beforeConvert, ContentConvert afterConvert) { string msg = string.Empty; htmlContent = htmlContent.Replace("\n", string.Empty); htmlContent = htmlContent.Replace("\r", string.Empty); htmlContent = regScript.Replace(htmlContent, string.Empty); htmlContent = regStyle.Replace(htmlContent, string.Empty); // htmlContent = htmlContent.Trim(); if (beforeConvert != null) { htmlContent = beforeConvert(htmlContent); } MatchCollection matchs = regTag.Matches(htmlContent); int tagIndex = 0; List <HtmlTagBase> tags = new List <HtmlTagBase>() , beginTags = new List <HtmlTagBase>() , endTages = new List <HtmlTagBase>() , singleTags = new List <HtmlTagBase>(); foreach (Match m in matchs) { HtmlTagBase t; string tagName = m.Groups[1].Value; //这里也可以根据HTML标签来反射生成Html标签类, 代码可以少很多, 但是这样性能不好。 switch (tagName.ToLower()) { case "img": t = new ImgTag(tagIndex, m.Value, m.Index); break; case "a": t = new ATag(tagIndex, m.Value, m.Index); break; case "font": t = new FontTag(tagIndex, m.Value, m.Index); break; case "span": t = new SpanTag(tagIndex, m.Value, m.Index); break; case "br": t = new BrTag(tagIndex, m.Value, m.Index); break; case "div": t = new DivTag(tagIndex, m.Value, m.Index); break; case "p": t = new PTag(tagIndex, m.Value, m.Index); break; case "table": t = new TableTag(tagIndex, m.Value, m.Index); break; case "ol": case "ul": t = new ListTag(tagIndex, m.Value, m.Index); break; case "td": case "tr": case "s": case "b": case "i": case "sub": case "sup": case "u": t = new PairTag(tagIndex, m.Value, m.Index); break; case "th": t = new PairTag(tagIndex, m.Value, m.Index); ((PairTag)t).UbbTag = "td"; break; case "strong": t = new PairTag(tagIndex, m.Value, m.Index); ((PairTag)t).UbbTag = "b"; break; case "em": t = new PairTag(tagIndex, m.Value, m.Index); ((PairTag)t).UbbTag = "i"; break; case "strike": t = new PairTag(tagIndex, m.Value, m.Index); ((PairTag)t).UbbTag = "s"; break; case "blockquote": t = new PairTag(tagIndex, m.Value, m.Index); ((PairTag)t).UbbTag = "indent"; break; case "h1": case "h2": case "h3": case "h4": case "h5": case "h6": t = new HTag(tagIndex, m.Value, m.Index); break; case "embed": t = new EmbedTag(tagIndex, m.Value, m.Index); break; default: t = new HtmlTagBase(tagIndex, m.Value, m.Index); break; } tagIndex++; t.TagList = tags; tags.Add(t); if (t.IsSingleTag) { singleTags.Add(t); } else { if (!t.IsEndTag) { beginTags.Add(t); } else { int flag = -1; for (int i = beginTags.Count - 1; i >= 0; i--) { if (beginTags[i].TagName == t.TagName)//匹配开始标记和结束标记 { flag = i; beginTags[i].Pair = t; t.Pair = beginTags[i]; break; } } if (flag >= 0) { for (int i = beginTags.Count - 1; i >= flag; i--) { beginTags.RemoveAt(i); } } } } } StringBuilder builder = new StringBuilder(htmlContent); for (int i = 0; i < tags.Count; i++) { if (!tags[i].IsSingleTag) { if (tags[i].Pair == null) { msg += tags[i].TagName + "没有对应的" + (tags[i].IsEndTag ? "开始" : "结束") + "标记\r\n"; } } if (!tags[i].IsEndTag || tags[i].IsSingleTag) { builder = tags[i].ConvertToUBB(builder); } } //builder.Replace(" ", string.Empty); builder.Replace("\t", string.Empty); htmlContent = builder.ToString(); htmlContent = new Regex("<.*?>").Replace(htmlContent, string.Empty); htmlContent = HttpUtility.HtmlDecode(htmlContent); if (afterConvert != null) { htmlContent = afterConvert(htmlContent); } return(htmlContent); }
private void SetValue(HtmlTagBase tag, string value) { if (tag is HtmlInputTag) { HtmlInputTag input=(HtmlInputTag)tag; input.Value = value; } if (tag is HtmlButtonTag) { HtmlButtonTag button = (HtmlButtonTag)tag; button.Value = value; } if (tag is HtmlSelectTag) { HtmlSelectTag select = (HtmlSelectTag)tag; select.Value = value; } if (tag is HtmlTextAreaTag) { HtmlTextAreaTag textarea=(HtmlTextAreaTag)tag; textarea.Value = value; } }