public HtmlInputItem(HtmlButtonGroup group, IHtmlElement element) { _group = group; if (!element.Name.EqualsIgnoreCase("input")) { throw new InvalidOperationException(); } var type = element.Attribute("type").Value(); if (type.EqualsIgnoreCase("radio")) { radio = true; } else if (type.EqualsIgnoreCase("checkbox")) { radio = false; } else { throw new InvalidOperationException(); } if (string.IsNullOrEmpty(element.Attribute("name").Value())) { throw new InvalidOperationException(); } _element = element; }
/// <summary> /// 渲染部分视图(重写此方法以实现自定义输出 partial 元素) /// </summary> /// <param name="partialElement">partial 元素</param> /// <returns></returns> protected virtual string RenderPartial(IHtmlElement partialElement) { var path = partialElement.Attribute("path").Value(); var name = partialElement.Attribute("name").Value(); try { if (!PartialExecutors.IsNullOrEmpty() && name != null) { return(RenderNamedPartial(partialElement, name)); } else if (path != null) { return(RenderVirtualPath(path)); } } catch //若渲染时发生错误 { if (JumonyWebConfiguration.Configuration.IgnorePartialRenderException || partialElement.Attribute("ignoreError") != null) { return("<!--parital render failed-->"); } else { throw; } } throw new NotSupportedException("无法处理的partial标签:" + ContentExtensions.GenerateTagHtml(partialElement, false)); }
/// <summary> /// 从元素标签中获取路由的虚拟路径 /// </summary> /// <param name="element">要获取分析路由虚拟路径的元素</param> /// <param name="clearRouteAttributes">是否清理路由属性设置</param> /// <returns>获取的虚拟路径</returns> internal string GetRouteUrl(IHtmlElement element, bool clearRouteAttributes) { if (element == null) { throw new ArgumentNullException("element"); } if (element.Attribute("action") == null) { throw new InvalidOperationException(); } var action = element.Attribute("action").Value() ?? RouteData.Values["action"].CastTo <string>(); var controller = element.Attribute("controller").Value() ?? RouteData.Values["controller"].CastTo <string>(); var routeValues = GetRouteValues(element, clearRouteAttributes); if (clearRouteAttributes) { element.RemoveAttribute("action"); element.RemoveAttribute("controller"); element.RemoveAttribute("inherits"); } return(Url.Action(action, controller, routeValues)); }
internal FormButtonGroupItem( FormButtonGroup groupControl, IHtmlElement element ) : base( groupControl ) { if ( groupControl == null ) throw new ArgumentNullException( "groupControl" ); if ( element == null ) throw new ArgumentNullException( "element" ); if ( !element.Name.EqualsIgnoreCase( "input" ) ) throw new InvalidOperationException(); if ( !element.Attribute( "name" ).Value().EqualsIgnoreCase( groupControl.Name ) ) throw new InvalidOperationException(); var type = element.Attribute( "type" ).Value(); if ( type.EqualsIgnoreCase( "radio" ) ) ButtonType = FormGroupButtonType.RadioButton; else if ( type.EqualsIgnoreCase( "checkbox" ) ) ButtonType = FormGroupButtonType.RadioButton; else throw new InvalidOperationException(); Element = element; }
/// <summary> /// 派生类重写此方法对拥有 Action URL 的元素进行处理 /// </summary> /// <param name="element">要处理的元素</param> /// <returns>元素是否包含 Action URL 并已经进行处理。</returns> protected virtual bool ProcessActionLink(IHtmlElement element) { if (element.Attribute("action") == null) { return(false); } string attributeName; if (element.Name.EqualsIgnoreCase("a")) { attributeName = "href"; } else if (element.Name.EqualsIgnoreCase("img") || element.Name.EqualsIgnoreCase("script")) { attributeName = "src"; } else if (element.Name.EqualsIgnoreCase("form") && element.Attribute("controller") != null) { attributeName = "action"; } else { return(false); } var action = element.Attribute("action").Value() ?? RouteData.Values["action"].CastTo <string>(); var controller = element.Attribute("controller").Value() ?? RouteData.Values["controller"].CastTo <string>(); var routeValues = UrlHelper.GetRouteValues(element); element.RemoveAttribute("action"); element.RemoveAttribute("controller"); element.RemoveAttribute("inherits"); var url = UrlHelper.Action(action, controller, routeValues); if (url == null) { element.Attribute(attributeName).Remove(); } else { element.SetAttribute(attributeName, url); } return(true); }
/// <summary> /// 设置属性 /// </summary> /// <param name="input"></param> /// <param name="disabled"></param> protected void SetAttributeDisabledReadOnly(IHtmlElement input, bool disabled) { if (disabled) { input.Attribute(HtmlAttribute.Disabled, "disabled"); } if (PropertyContent.ReadOnly) { input.Attribute(HtmlAttribute.ReadOnly, "readonly"); } }
/// <summary> /// 设置属性 /// </summary> /// <param name="input"></param> /// <param name="disabled"></param> protected void SetAttributeDisabledReadOnlyPlaceHolder(IHtmlElement input, bool disabled) { if (disabled) { input.Attribute(HtmlAttribute.Disabled, "disabled"); } if (PropertyContent.ReadOnly) { input.Attribute(HtmlAttribute.ReadOnly, "readonly"); } if (!string.IsNullOrEmpty(PropertyContent.Description)) { input.Attribute(HtmlAttribute.PlaceHolder, PropertyContent.Description); } }
private HashSet <string> GetClasses() { var classSet = new HashSet <string>(); var classes = _element.Attribute("class").Value(); if (classes == null) { return(classSet); } foreach (var c in classes.Split(' ')) { if (string.IsNullOrEmpty(c)) { continue; } if (classSet.Contains(c)) { continue; } classSet.Add(c); } return(classSet); }
/// <summary> /// 返回元素的唯一ID,没有ID属性,或者有但非唯一,返回null /// </summary> /// <param name="element">要标识的元素</param> /// <param name="create">指示当没有唯一ID时是否创建一个</param> /// <param name="ancestorsCreate">在创建ID的过程中,是否为没有唯一ID的父级也创建ID</param> /// <returns>元素的唯一ID。</returns> public static string Identity(this IHtmlElement element, bool create, bool ancestorsCreate) { if (element == null) { throw new ArgumentNullException("element"); } EnsureAllocated(element); var id = element.Attribute("id").Value(); if (string.IsNullOrEmpty(id) || !element.Document.AllElements().Where(e => e.Attribute("id").Value() == id).IsSingle()) { id = null; } if (create && id == null) { element.SetAttribute("id", id = CreateIdentity(element, ancestorsCreate)); } return(id); }
/// <summary> /// 从元素标签中获取所有的路由值 /// </summary> /// <param name="element">要获取分析路由值的元素</param> /// <returns>获取的路由值</returns> protected RouteValueDictionary GetRouteValues(IHtmlElement element) { var routeValues = new RouteValueDictionary(); var inherits = element.Attribute("inherits").Value(); if (inherits != null) { var inheritsKeys = GetInheritsKeys(inherits).Distinct(StringComparer.OrdinalIgnoreCase); foreach (var key in inheritsKeys) { routeValues.Add(key, RouteData.Values[key]); } } foreach (var attribute in element.Attributes().Where(a => a.Name.StartsWith("_")).ToArray()) { var key = attribute.Name.Substring(1); var value = attribute.Value() ?? RouteData.Values[key]; routeValues.Remove(key); routeValues.Add(key, value); attribute.Remove(); } return(routeValues); }
public void GetPageUrlToRedis(string url) { try { IHtmlDocument html = new JumonyParser().LoadDocument(url); var pagelist = html.Find(".co_content8 .x a"); var last_index = pagelist.Count() - 3; var end_index = pagelist.Count() - 1; var last_url = pagelist.ToList()[last_index].Attribute("href").Value(); var end_txt = pagelist.ToList()[end_index].InnerText(); this.isendpage = end_txt.IndexOf("末页") >= 0 ? false : true; looplast_index = isendpage ? pagelist.Count() : pagelist.Count() - 1; var last_full_url = page_baseurl + last_url; int i = 0; i = isfirstpage ? 0 : 2; for (; i < looplast_index; i++) { IHtmlElement item = pagelist.ToList()[i]; string pageurl = item.Attribute("href").Value(); string pagefullurl = page_baseurl + pageurl; db.SortedSetAdd("filmpageurl", pagefullurl, (double)index++); if (i == last_index && !isendpage) { isfirstpage = false; GetPageUrl(pagefullurl); } } } catch (Exception e) { log.Error(e.Message); throw; } }
private void GetUrlText_1(Class1[] RTc, IHtmlDocument document) { IEnumerable <IHtmlElement> result = document.Find("div").Where(d => d.Identity() == "main"); IEnumerable <IHtmlElement> t = result.Find("tr"); Dictionary <string, string> dir = new Dictionary <string, string>(); int r = 0; foreach (var item in t) { #region MyRegion Class1 _class = new Class1(); IHtmlElement item_a = item.FindFirst(".bthead>a"); _class.TextName = item_a.InnerText().Trim(); _class.href = item_a.Attribute("href").Value().Trim(); _class.Quyu = GetN_value(item, ".a_xq1"); string st = GetN_value(item, ".qj-lijjrname"); _class.PersonName = st.Replace(":", "").Trim();; _class.Laiyuan = GetN_value(item, "label"); string[] str_ = GetN_value(item, ".qj-listleft").Split(' '); List <string> str_1 = LIST_G(str_); _class.Address = str_1[2]; //_class.SumMoney = item.FindFirst(".pri").InnerText(); string[] ssp = GetN_value(item, ".qj-listright").Split(' '); int j = ssp.Length == 10 ? 0 : 10 - ssp.Length; _class.SumMoney = ssp[1 - j] + ssp[2 - j]; _class.PingMoney = ssp[4 - j]; _class.Allpm = ssp[7 - j] + ssp[9 - j]; string[] datetime = GetN_value(item, ".qj-listjjr").Split(' '); _class.datetime = datetime.Length == 3 ? datetime[2] : ""; RTc[r] = _class; r++; #endregion } }
/// <summary> /// 设置属性值 /// </summary> /// <param name="element">要设置属性值的元素</param> /// <param name="attributeName">属性名</param> /// <param name="value">属性值</param> /// <param name="attribute">设置好的属性</param> /// <returns>设置了属性的元素</returns> public static IHtmlElement SetAttribute(this IHtmlElement element, string attributeName, string value, out IHtmlAttribute attribute) { if (element == null) { throw new ArgumentNullException("element"); } if (attributeName == null) { throw new ArgumentNullException("attributeName"); } lock (element.SyncRoot) { var _attribute = element.Attribute(attributeName); if (_attribute != null) { _attribute.Remove(); } attribute = element.AddAttribute(attributeName, value); } return(element); }
internal RouteValueDictionary GetRouteValues( IHtmlElement element, bool clearRouteAttributes ) { var routeValues = new RouteValueDictionary(); var inherits = element.Attribute( "inherits" ).Value(); if ( inherits != null ) { var inheritsKeys = GetInheritsKeys( inherits ); foreach ( var key in inheritsKeys ) routeValues.Add( key, RequestContext.RouteData.Values[key] ); } if ( !MvcEnvironment.Configuration.DisableUnderscorePrefix ) CustomRouteValues( element, "_", routeValues, clearRouteAttributes ); CustomRouteValues( element, "route-", routeValues, clearRouteAttributes ); return routeValues; }
internal RouteValueDictionary GetRouteValues(IHtmlElement element, bool clearRouteAttributes) { var routeValues = new RouteValueDictionary(); var inherits = element.Attribute("inherits").Value(); if (inherits != null) { var inheritsKeys = GetInheritsKeys(inherits); foreach (var key in inheritsKeys) { routeValues.Add(key, RequestContext.RouteData.Values[key]); } } if (!MvcEnvironment.Configuration.DisableUnderscorePrefix) { CustomRouteValues(element, "_", routeValues, clearRouteAttributes); } CustomRouteValues(element, "route-", routeValues, clearRouteAttributes); return(routeValues); }
public HtmlTextInput(IHtmlElement element) { if (string.Equals(element.Name, "input", StringComparison.InvariantCultureIgnoreCase)) { var inputTypes = new[] { "text", "password", "hidden" }; if (!inputTypes.Contains(element.Attribute("type").Value, StringComparer.InvariantCultureIgnoreCase)) { throw new InvalidOperationException("只有type为text、password或hidden的input元素才能转换为HtmlTextInput对象"); } _element = element; _valueAttributeName = "value"; } else if (string.Equals(element.Name, "textarea", StringComparison.InvariantCultureIgnoreCase)) { _element = element; _valueAttributeName = ":text"; } if (_element == null) { throw new InvalidOperationException("只有input或textarea元素才能转换为HtmlTextInput对象"); } }
/// <summary> /// 对元素进行数据绑定 /// </summary> /// <param name="element">需要绑定数据的元素</param> /// <param name="context">绑定上下文</param> /// <returns>返回是否对元素进行了不可逆转的操作(例如移除),故而禁止后续的绑定操作</returns> public void BindElement( HtmlBindingContext context, IHtmlElement element ) { if ( element.Attribute( "binding-visible" ) != null ) { var visible = element.Attribute( "binding-visible" ).Value(); if ( visible.EqualsIgnoreCase( "false" ) || visible.EqualsIgnoreCase( "hidden" ) || visible.EqualsIgnoreCase( "invisible" ) ) { element.Remove(); context.CancelChildsBinding = context.BindCompleted = true; } } { //处理样式类 var classAttribute = element.Attribute( classAttributePrefix ); if ( classAttribute != null ) { if ( !string.IsNullOrWhiteSpace( classAttribute.AttributeValue ) ) { var classes = Regulars.whiteSpaceSeparatorRegex.Split( classAttribute.AttributeValue ).Where( c => c != "" ).ToArray(); if ( classes.Any() ) element.Class( classes ); } element.RemoveAttribute( classAttributePrefix ); } } { var classAttributes = element.Attributes().Where( a => a.Name.StartsWith( classAttributePrefix ) ).ToArray(); BindElementClasses( element, classAttributes ); } //处理CSS样式 var styleAttributes = element.Attributes().Where( a => a.Name.StartsWith( styleAttributePrefix ) ).ToArray(); BindElementStyles( element, styleAttributes ); }
/// <summary> /// 对元素进行数据绑定 /// </summary> /// <param name="element">需要绑定数据的元素</param> /// <param name="context">绑定上下文</param> /// <returns>返回是否对元素进行了不可逆转的操作(例如移除),故而禁止后续的绑定操作</returns> public void BindElement(HtmlBindingContext context, IHtmlElement element) { if (element.Attribute("binding-visible") != null) { var visible = element.Attribute("binding-visible").Value(); if (visible.EqualsIgnoreCase("false") || visible.EqualsIgnoreCase("hidden") || visible.EqualsIgnoreCase("invisible")) { element.Remove(); context.CancelChildsBinding = context.BindCompleted = true; } } { //处理样式类 var classAttribute = element.Attribute(classAttributePrefix); if (classAttribute != null) { if (!string.IsNullOrWhiteSpace(classAttribute.AttributeValue)) { var classes = Regulars.whiteSpaceSeparatorRegex.Split(classAttribute.AttributeValue).Where(c => c != "").ToArray(); if (classes.Any()) { element.Class(classes); } } element.RemoveAttribute(classAttributePrefix); } } { var classAttributes = element.Attributes().Where(a => a.Name.StartsWith(classAttributePrefix)).ToArray(); BindElementClasses(element, classAttributes); } //处理CSS样式 var styleAttributes = element.Attributes().Where(a => a.Name.StartsWith(styleAttributePrefix)).ToArray(); BindElementStyles(element, styleAttributes); }
/// <summary> /// 设置目标属性 /// </summary> /// <param name="source"></param> /// <param name="element"></param> internal static void SetTargetAttribute(this LinkBehave source, IHtmlElement element) { var target = source.GetTarget(); if (target == null) { return; } element.Attribute(HtmlAttribute.Target, target); }
internal FormButtonGroupItem(FormButtonGroup groupControl, IHtmlElement element) : base(groupControl) { if (groupControl == null) { throw new ArgumentNullException("groupControl"); } if (element == null) { throw new ArgumentNullException("element"); } if (!element.Name.EqualsIgnoreCase("input")) { throw new InvalidOperationException(); } if (!element.Attribute("name").Value().EqualsIgnoreCase(groupControl.Name)) { throw new InvalidOperationException(); } var type = element.Attribute("type").Value(); if (type.EqualsIgnoreCase("radio")) { ButtonType = FormGroupButtonType.RadioButton; } else if (type.EqualsIgnoreCase("checkbox")) { ButtonType = FormGroupButtonType.RadioButton; } else { throw new InvalidOperationException(); } Element = element; }
internal HtmlInputText( HtmlForm form, IHtmlElement element ) { if ( !element.Name.EqualsIgnoreCase( "input" ) ) throw new InvalidOperationException( "只有input元素才能转换为HtmlTextInput对象" ); _type = element.Attribute( "type" ).Value(); if ( !allowTypes.Contains( _type, StringComparer.OrdinalIgnoreCase ) ) throw new InvalidOperationException( "只有type为text、password或hidden的input元素才能转换为HtmlTextInput对象" ); _form = form; _element = element; }
/// <summary> /// 确保当前跟踪的样式是最新的 /// </summary> private void EnsureStyle() { lock (_element.SyncRoot) { var styleAttribute = _element.Attribute("style"); if (_style == null || styleAttribute != _attribute || (styleAttribute == null && _style.Any())) { _style = CssPropertyParser.ParseCssStyle(styleAttribute.Value().IfNull("")); _attribute = styleAttribute; } } }
/// <summary> /// 检查元素是否符合选择条件 /// </summary> /// <param name="element">要检查的元素</param> /// <returns>是否符合条件</returns> public bool IsEligible( IHtmlElement element ) { string _value = null; var attribute = element.Attribute( name ); if ( comparison == null )//如果没有运算符,那么表示判断属性是否存在 return attribute != null; if ( attribute != null ) _value = attribute.AttributeValue; return matchers[comparison]( value, _value ); }
internal CssStyle(IHtmlElement element) { if (element == null) { throw new ArgumentNullException("element"); } _element = element; lock (element.SyncRoot) { settings = GetStyleSettings(element.Attribute("style").Value()); } }
/// <summary> /// 渲染部分视图 /// </summary> /// <param name="partialElement">partial 元素</param> /// <returns></returns> protected virtual string RenderPartial(IHtmlElement partialElement) { var action = partialElement.Attribute("action").Value(); var view = partialElement.Attribute("view").Value(); var path = partialElement.Attribute("path").Value(); var handler = partialElement.Attribute("handler").Value(); var helper = MakeHelper(); try { if (action != null)//Action 部分视图 { var controller = partialElement.Attribute("controller").Value() ?? (string)RouteData.Values["controller"]; var routeValues = GetRouteValues(partialElement); return(helper.Action(actionName: action, controllerName: controller, routeValues: routeValues).ToString()); } else if (view != null) { return(helper.Partial(partialViewName: view).ToString()); } else if (path != null) { if (!VirtualPathUtility.IsAppRelative(path)) { throw new FormatException("path 只能使用应用程序根相对路径,即以 \"~/\" 开头的路径,调用 VirtualPathUtility.ToAppRelative 方法或使用 HttpRequest.AppRelativeCurrentExecutionFilePath 属性获取"); } var content = HtmlProviders.LoadContent(HttpContext, path); if (content != null) { return(content.Content); } } } catch (ThreadAbortException) { } catch //若渲染时发生错误 { if (MvcEnvironment.Configuration.IgnorePartialRenderException || partialElement.Attribute("ignoreError") != null) { return("<!--parital view render failed-->"); } else { throw; } } throw new NotSupportedException("无法处理的partial标签:" + ContentExtensions.GenerateTagHtml(partialElement, false)); }
public string Execute( object handler, IHtmlElement partialElement ) { object[] parameterValues = new object[_parameters.Length]; foreach ( var parameter in _parameters ) { var value = partialElement.Attribute( parameter.Name ).Value(); if ( value != null ) parameterValues[parameter.Position] = ConvertValue( value, parameter.ParameterType ); else parameterValues[parameter.Position] = parameter.DefaultValue.IfNull( null ); } return _executor( handler, parameterValues ); }
/// <summary> /// 渲染部分视图(重写此方法以实现自定义输出 partial 元素) /// </summary> /// <param name="partialElement">partial 元素</param> /// <returns></returns> protected override string RenderPartial(IHtmlElement partialElement) { var action = partialElement.Attribute("action").Value(); var view = partialElement.Attribute("view").Value(); var path = partialElement.Attribute("path").Value(); var name = partialElement.Attribute("name").Value(); if (name != null) { return(RenderNamedPartial(partialElement, name)); } var helper = MakeHelper(); try { if (action != null)//Action 部分视图 { var routeValues = Url.GetRouteValues(partialElement); return(RenderAction(partialElement, action, partialElement.Attribute("controller").Value(), routeValues)); } else if (view != null) { return(RenderPartial(partialElement, view)); } else if (path != null) { RenderVirtualPath(path); } } catch (ThreadAbortException) { throw;//不应屏蔽异常 } catch //若渲染时发生错误 { if (MvcEnvironment.Configuration.IgnorePartialRenderException || partialElement.Attribute("ignoreError") != null) { return("<!--parital view render failed-->"); } else { throw; } } throw new NotSupportedException("无法处理的partial标签:" + ContentExtensions.GenerateTagHtml(partialElement, false)); }
/// <summary> /// 绑定元素 /// </summary> /// <param name="context">当前绑定上下文</param> /// <param name="element">要绑定的元素</param> /// <returns>永远返回 false,表示继续进行后面的绑定</returns> public void BindElement( HtmlBindingContext context, IHtmlElement element ) { if ( !element.Document.HtmlSpecification.IsCDataElement( element.Name ) ) return; if ( element.Attribute( "literal-binder" ) == null ) return; lock ( element.SyncRoot ) { var text = element.InnerHtml(); text = LiteralBind( text ); } }
internal HtmlInputText(HtmlForm form, IHtmlElement element) { if (!element.Name.EqualsIgnoreCase("input")) { throw new InvalidOperationException("只有input元素才能转换为HtmlTextInput对象"); } _type = element.Attribute("type").Value(); if (!allowTypes.Contains(_type, StringComparer.OrdinalIgnoreCase)) { throw new InvalidOperationException("只有type为text、password或hidden的input元素才能转换为HtmlTextInput对象"); } _form = form; _element = element; }
/// <summary> /// 确保跟踪到了最新的样式类信息。 /// </summary> private void EnsureUpdated() { var classValue = _element.Attribute("class").Value(); if (_rawValue != classValue || _classes == null) { if (string.IsNullOrEmpty(classValue)) { _classes = new HashSet <string>(); } else { _classes = new HashSet <string>(Regulars.whiteSpaceSeparatorRegex.Split(classValue).Where(c => c != "")); } _rawValue = classValue; } }
/// <summary> /// 检查元素是否符合选择条件 /// </summary> /// <param name="element">要检查的元素</param> /// <returns>是否符合条件</returns> public bool IsEligible(IHtmlElement element) { string _value = null; var attribute = element.Attribute(name); if (comparison == null)//如果没有运算符,那么表示判断属性是否存在 { return(attribute != null); } if (attribute != null) { _value = attribute.AttributeValue; } return(matchers[comparison](value, _value)); }
protected override void OnAddElement(IHtmlElement element) { var id = element.Attribute("id").Value(); if (id == null) { return; } if (data.ContainsKey(id)) { throw new InvalidOperationException(string.Format("文档结构不正确,存在两个 id 为 \"{0}\" 的元素,索引编制失败", id)); } data.Add(id, element); }
private void GetUrlText_2(IHtmlDocument document, List <Class1> L_Class) { IEnumerable <IHtmlElement> result1 = document.Find(".list-items"); foreach (var item in result1) { #region MyRegion Class1 _class = new Class1(); IHtmlElement item_a = item.FindFirst("a"); string img_str = item.Exists("img") ? item.FindFirst("img").Attribute("src").Value() : ""; _class.Image_Count = img_str.Length > 0 ? img_str.IndexOf("default.jpg") > 0?0:1:0; IEnumerable <IHtmlElement> div = item.Find("div"); List <string> ls = new List <string>(); foreach (var d in div) { ls.Add(d.InnerText()); } _class.TextName = ls[2]; _class.SumMoney = ls[4]; _class.Quyu = "赶集"; _class.Allpm = ls[1]; _class.Address = ls[0]; _class.href = item_a.Attribute("href").Value().Trim(); IEnumerable <IHtmlElement> ssa = item_a.Find("span"); string item_aa = item_a.ToString().Replace("<!--", "stu1").Replace("-->", "stp2"); item_aa = item_aa.Substring(item_aa.IndexOf("stu1") + 4); item_aa = item_aa.Substring(0, item_aa.IndexOf("stp2")); item_aa = item_aa.Substring(item_aa.IndexOf(">") + 1); item_aa = item_aa.Substring(0, item_aa.IndexOf("<")); _class.datetime = item_aa; string[] pm = _class.Allpm.Split(' '); double pm_int = Convert.ToDouble(pm[6].Replace('㎡', ' ').Trim().Length <= 0 ? pm[5].Replace('㎡', ' ').Trim() : pm[6].Replace('㎡', ' ').Trim()); double ss = ((Convert.ToDouble(_class.SumMoney.Replace("万元", "").Trim()) / pm_int)); _class.PingMoney = "≈" + Convert.ToInt32(ss * 10000).ToString(); _class.Image_str = _class.Image_Count > 0 ? "有" : string.Empty; L_Class.Add(_class); r++; #endregion } }
/// <summary> /// 绑定元素 /// </summary> /// <param name="context">当前绑定上下文</param> /// <param name="element">要绑定的元素</param> /// <returns>永远返回 false,表示继续进行后面的绑定</returns> public void BindElement(HtmlBindingContext context, IHtmlElement element) { if (!element.Document.HtmlSpecification.IsCDataElement(element.Name)) { return; } if (element.Attribute("literal-binder") == null) { return; } lock (element.SyncRoot) { var text = element.InnerHtml(); text = LiteralBind(text); } }
/// <summary> /// 执行分部页获取渲染结果 /// </summary> /// <param name="host">分部视图执行方法所属的对象</param> /// <param name="partialElement">定义分部页的元素</param> /// <returns></returns> public string Execute(object host, IHtmlElement partialElement) { object[] parameterValues = new object[_parameters.Length]; foreach (var parameter in _parameters) { var value = partialElement.Attribute(parameter.Name).Value(); if (value != null) { parameterValues[parameter.Position] = ConvertValue(value, parameter.ParameterType); } else { parameterValues[parameter.Position] = parameter.DefaultValue.IfNull(null); } } return(_executor(host, parameterValues)); }
public HtmlTextInput( IHtmlElement element ) { if ( string.Equals( element.Name, "input", StringComparison.InvariantCultureIgnoreCase ) ) { var inputTypes = new[] { "text", "password", "hidden" }; if ( !inputTypes.Contains( element.Attribute( "type" ).Value, StringComparer.InvariantCultureIgnoreCase ) ) throw new InvalidOperationException( "只有type为text、password或hidden的input元素才能转换为HtmlTextInput对象" ); _element = element; _valueAttributeName = "value"; } else if ( string.Equals( element.Name, "textarea", StringComparison.InvariantCultureIgnoreCase ) ) { _element = element; _valueAttributeName = ":text"; } if ( _element == null ) throw new InvalidOperationException( "只有input或textarea元素才能转换为HtmlTextInput对象" ); }
internal HtmlInputText( HtmlForm form, IHtmlElement element ) : base( form, element ) { var value = element.Attribute( "value" ).Value() ?? ""; }
/// <summary> /// 派生类重写此方法对拥有 Action URL 的元素进行处理 /// </summary> /// <param name="element">要处理的元素</param> /// <returns>元素是否包含 Action URL 并已经进行处理。</returns> protected virtual bool ProcessActionLink( IHtmlElement element ) { if ( element.Attribute( "action" ) == null ) return false; string attributeName; if ( element.Name.EqualsIgnoreCase( "a" ) ) attributeName = "href"; else if ( element.Name.EqualsIgnoreCase( "img" ) || element.Name.EqualsIgnoreCase( "script" ) ) attributeName = "src"; else if ( element.Name.EqualsIgnoreCase( "form" ) && element.Attribute( "controller" ) != null ) attributeName = "action"; else return false; var action = element.Attribute( "action" ).Value() ?? RouteData.Values["action"].CastTo<string>(); var controller = element.Attribute( "controller" ).Value() ?? RouteData.Values["controller"].CastTo<string>(); var routeValues = UrlHelper.GetRouteValues( element ); element.RemoveAttribute( "action" ); element.RemoveAttribute( "controller" ); element.RemoveAttribute( "inherits" ); var url = UrlHelper.Action( action, controller, routeValues ); if ( url == null ) element.Attribute( attributeName ).Remove(); else element.SetAttribute( attributeName, url ); return true; }
/// <summary> /// 渲染部分视图(重写此方法以实现自定义输出 partial 元素) /// </summary> /// <param name="partialElement">partial 元素</param> /// <returns></returns> protected override string RenderPartial( IHtmlElement partialElement ) { var action = partialElement.Attribute( "action" ).Value(); var view = partialElement.Attribute( "view" ).Value(); var path = partialElement.Attribute( "path" ).Value(); var name = partialElement.Attribute( "name" ).Value(); if ( name != null ) return RenderNamedPartial( partialElement, name ); var helper = MakeHelper(); try { if ( action != null )//Action 部分视图 { var routeValues = Url.GetRouteValues( partialElement ); return RenderAction( partialElement, action, partialElement.Attribute( "controller" ).Value(), routeValues ); } else if ( view != null ) { return RenderPartial( partialElement, view ); } else if ( path != null ) { RenderVirtualPath( path ); } } catch ( ThreadAbortException ) { throw;//不应屏蔽异常 } catch //若渲染时发生错误 { if ( MvcEnvironment.Configuration.IgnorePartialRenderException || partialElement.Attribute( "ignoreError" ) != null ) return "<!--parital view render failed-->"; else throw; } throw new NotSupportedException( "无法处理的partial标签:" + ContentExtensions.GenerateTagHtml( partialElement, false ) ); }
private static string GetElementName( IHtmlElement element ) { switch ( element.Name.ToLowerInvariant() ) { case "html": //case "head": case "body": return null; case "a": if ( element.Attribute( "name" ) != null ) return "link"; else return "anchor"; case "li": return "item"; case "ul": case "ol": return "list"; case "h1": case "h2": case "h3": case "h4": case "h5": case "h6": return "header"; default: return element.Name; } }
/// <summary> /// 渲染部分视图(重写此方法以实现自定义输出 partial 元素) /// </summary> /// <param name="partialElement">partial 元素</param> /// <returns></returns> protected virtual string RenderPartial( IHtmlElement partialElement ) { var action = partialElement.Attribute( "action" ).Value(); var view = partialElement.Attribute( "view" ).Value(); var path = partialElement.Attribute( "path" ).Value(); var handler = partialElement.Attribute( "handler" ).Value(); var name = partialElement.Attribute( "name" ).Value(); if ( !_partialExecutors.IsNullOrEmpty() && name != null ) { var executor = _partialExecutors.FirstOrDefault( e => e.Name.EqualsIgnoreCase( name ) ); if ( executor != null ) { var wrapper = ViewHandler as IHandlerWrapper; if ( wrapper != null ) return executor.Execute( wrapper.Handler, partialElement ); else return executor.Execute( ViewHandler, partialElement ); } } var helper = MakeHelper(); try { if ( action != null )//Action 部分视图 { var routeValues = Url.GetRouteValues( partialElement ); return RenderAction( partialElement, action, partialElement.Attribute( "controller" ).Value(), routeValues ); } else if ( view != null ) { return RenderPartial( partialElement, view ); } else if ( path != null ) { if ( !VirtualPathUtility.IsAppRelative( path ) ) throw new FormatException( "path 只能使用应用程序根相对路径,即以 \"~/\" 开头的路径,调用 VirtualPathUtility.ToAppRelative 方法或使用 HttpRequest.AppRelativeCurrentExecutionFilePath 属性获取" ); var content = HtmlProviders.LoadContent( path ); if ( content != null ) return content.Content; } } catch ( ThreadAbortException ) { } catch //若渲染时发生错误 { if ( MvcEnvironment.Configuration.IgnorePartialRenderException || partialElement.Attribute( "ignoreError" ) != null ) return "<!--parital view render failed-->"; else throw; } throw new NotSupportedException( "无法处理的partial标签:" + ContentExtensions.GenerateTagHtml( partialElement, false ) ); }
public HtmlInputItem( HtmlButtonGroup group, IHtmlElement element ) { _group = group; if ( !element.Name.EqualsIgnoreCase( "input" ) ) throw new InvalidOperationException(); var type = element.Attribute( "type" ).Value(); if ( type.EqualsIgnoreCase( "radio" ) ) radio = true; else if ( type.EqualsIgnoreCase( "checkbox" ) ) radio = false; else throw new InvalidOperationException(); if ( string.IsNullOrEmpty( element.Attribute( "name" ).Value() ) ) throw new InvalidOperationException(); _element = element; }
/// <summary> /// 对元素进行数据绑定 /// </summary> /// <param name="element">需要绑定数据的元素</param> /// <param name="context">绑定上下文</param> /// <param name="dataContext">数据上下文</param> /// <returns>是否进行了绑定</returns> public bool BindElement( IHtmlElement element, HtmlBindingContext context, out object dataContext ) { dataContext = null; if ( element.Attribute( "binding-visible" ) != null ) { var visible = element.Attribute( "binding-visible" ).Value(); if ( visible.EqualsIgnoreCase( "false" ) || visible.EqualsIgnoreCase( "hidden" ) || visible.EqualsIgnoreCase( "invisible" ) ) element.Remove(); return true; } //处理样式类 { var classAttribute = element.Attribute( classAttributeName ); if ( classAttribute != null ) { if ( !string.IsNullOrWhiteSpace( classAttribute.AttributeValue ) ) { var classes = Regulars.whiteSpaceSeparatorRegex.Split( classAttribute.AttributeValue ).Where( c => c != "" ).ToArray(); if ( classes.Any() ) element.Class( classes ); } element.RemoveAttribute( classAttributeName ); } } //处理CSS样式 var styleAttributes = element.Attributes().Where( a => a.Name.StartsWith( styleAttributePrefix ) ).ToArray(); if ( styleAttributes.Any() ) BindElementStyles( element, styleAttributes ); if ( !element.Name.EqualsIgnoreCase( "view" ) && !element.Name.EqualsIgnoreCase( "binding" ) ) { var dataContextExpression = AttributeExpression.ParseExpression( element.Attribute( "datacontext" ) ); if ( dataContextExpression != null ) dataContext = GetDataObject( dataContextExpression, context ); return false; } var expression = new AttributeExpression( element ); object dataObject = GetDataObject( expression, context ); if ( dataObject == null ) return false; var format = element.Attribute( "format" ).Value(); //绑定到客户端脚本对象 var variableName = element.Attribute( "var" ).Value() ?? element.Attribute( "variable" ).Value(); if ( variableName != null ) { if ( format != null ) dataObject = string.Format( format, dataObject ); var hostName = element.Attribute( "host" ).Value(); var script = (string) null; if ( hostName == null ) script = string.Format( "(function(){{ this['{0}'] = {1} }})();", variableName, ToJson( dataObject ) ); else script = string.Format( "(function(){{ this['{0}'] = {1} }})();", variableName, ToJson( dataObject ) ); element.ReplaceWith( string.Format( "<script type=\"text/javascript\">{0}</script>", script ) ); return true; } //绑定为 HTML 文本 var bindValue = string.Format( format ?? "{0}", dataObject ); var attributeName = element.Attribute( "attribute" ).Value() ?? element.Attribute( "attr" ).Value(); if ( attributeName != null ) { var nextElement = element.NextElement(); if ( nextElement == null ) return false; nextElement.SetAttribute( attributeName, bindValue ); return true; } element.ReplaceWith( bindValue ); return true; }
/// <summary> /// 渲染部分视图(重写此方法以实现自定义输出 partial 元素) /// </summary> /// <param name="partialElement">partial 元素</param> /// <returns></returns> protected virtual string RenderPartial( IHtmlElement partialElement ) { var path = partialElement.Attribute( "path" ).Value(); var name = partialElement.Attribute( "name" ).Value(); try { if ( !PartialExecutors.IsNullOrEmpty() && name != null ) return RenderNamedPartial( partialElement, name ); else if ( path != null ) return RenderVirtualPath( path ); } catch //若渲染时发生错误 { if ( JumonyWebConfiguration.Configuration.IgnorePartialRenderException || partialElement.Attribute( "ignoreError" ) != null ) return "<!--parital render failed-->"; else throw; } throw new NotSupportedException( "无法处理的partial标签:" + ContentExtensions.GenerateTagHtml( partialElement, false ) ); }
/// <summary> /// 从元素标签中获取路由的虚拟路径 /// </summary> /// <param name="element">要获取分析路由虚拟路径的元素</param> /// <param name="clearRouteAttributes">是否清理路由属性设置</param> /// <returns>获取的虚拟路径</returns> internal string GetRouteUrl( IHtmlElement element, bool clearRouteAttributes ) { if ( element == null ) throw new ArgumentNullException( "element" ); if ( element.Attribute( "action" ) == null ) throw new InvalidOperationException(); var action = element.Attribute( "action" ).Value() ?? RouteData.Values["action"].CastTo<string>(); var controller = element.Attribute( "controller" ).Value() ?? RouteData.Values["controller"].CastTo<string>(); var routeValues = GetRouteValues( element, clearRouteAttributes ); if ( clearRouteAttributes ) { element.RemoveAttribute( "action" ); element.RemoveAttribute( "controller" ); element.RemoveAttribute( "inherits" ); } return Url.Action( action, controller, routeValues ); }