/// <summary> /// 转换 URI 与当前请求匹配 /// </summary> /// <param name="attribute"></param> protected virtual void ResolveUri(IHtmlAttribute attribute) { var uriValue = attribute.AttributeValue; if (string.IsNullOrWhiteSpace(uriValue))//对于空路径暂不作处理。 { return; } Uri absoluteUri; if (Uri.TryCreate(uriValue, UriKind.Absolute, out absoluteUri))//对于绝对 URI,不采取任何动作。 { return; } if (VirtualPathUtility.IsAbsolute(uriValue))//对于绝对路径,也不采取任何动作。 { return; } if (uriValue.StartsWith("#"))//若是本路径的片段链接,也不采取任何动作。 { return; } if (uriValue.StartsWith("?"))//若是本路径的查询链接,也不采取任何动作。 { return; } attribute.SetValue(ResolveVirtualPath(uriValue)); }
/// <summary> /// 对元素属性进行绑定操作 /// </summary> /// <param name="attribute">要绑定的元素属性</param> /// <param name="context">绑定上下文</param> /// <returns>是否成功绑定</returns> public bool BindAttribute(IHtmlAttribute attribute, HtmlBindingContext context) { if (attribute.Name == "datacontext") { return(false); } var expression = AttributeExpression.ParseExpression(attribute); if (expression == null || !expression.Name.EqualsIgnoreCase("Binding")) { return(false); } var dataObject = GetDataObject(expression, context); if (dataObject == null) { attribute.Remove(); return(true); } string value = GetBindingValue(expression, dataObject); attribute.SetValue(value); return(true); }
/// <summary> /// 转换 URI 与当前请求匹配 /// </summary> /// <param name="attribute">HTML 属性</param> /// <param name="baseVirtualPath">基路径</param> public void ResolveUri(IHtmlAttribute attribute, string baseVirtualPath) { if (attribute == null) { throw new ArgumentNullException("attribute"); } if (baseVirtualPath == null) { throw new ArgumentNullException("baseVirtualPath"); } var uriValue = attribute.AttributeValue; if (string.IsNullOrWhiteSpace(uriValue))//对于空路径暂不作处理。 { return; } Uri absoluteUri; if (Uri.TryCreate(uriValue, UriKind.Absolute, out absoluteUri))//对于绝对 URI,不采取任何动作。 { return; } if (VirtualPathUtility.IsAbsolute(uriValue))//对于绝对路径,也不采取任何动作。 { return; } if (uriValue.StartsWith("#"))//若是本路径的片段链接,也不采取任何动作。 { return; } if (uriValue.StartsWith("?"))//若是本路径的查询链接,也不采取任何动作。 { return; } attribute.SetValue(ResolveVirtualPath(baseVirtualPath, uriValue)); }
/// <summary> /// 进行属性绑定 /// </summary> /// <param name="attribute">要绑定的属性</param> protected virtual void BindAttribute(IHtmlAttribute attribute) { var expression = BindingExpression.ParseExpression(attribute.Value()); if (expression == null) { return; } var value = GetValue(expression); if (value == null) { attribute.Remove(); } else { attribute.SetValue(value.ToString()); } }
/// <summary> /// 对元素属性进行绑定操作 /// </summary> /// <param name="attribute">要绑定的元素属性</param> /// <param name="context">绑定上下文</param> /// <returns>是否成功绑定</returns> public bool BindAttribute( IHtmlAttribute attribute, HtmlBindingContext context ) { if ( attribute.Name == "datacontext" ) return false; var expression = AttributeExpression.ParseExpression( attribute ); if ( expression == null || !expression.Name.EqualsIgnoreCase( "Binding" ) ) return false; var dataObject = GetDataObject( expression, context ); if ( dataObject == null ) { attribute.Remove(); return true; } string value = GetBindingValue( expression, dataObject ); attribute.SetValue( value ); return true; }
/// <summary> /// 转换 URI 与当前请求匹配 /// </summary> /// <param name="attribute">HTML 属性</param> /// <param name="baseVirtualPath">基路径</param> public void ResolveUri( IHtmlAttribute attribute, string baseVirtualPath ) { if ( attribute == null ) throw new ArgumentNullException( "attribute" ); if ( baseVirtualPath == null ) throw new ArgumentNullException( "baseVirtualPath" ); var uriValue = attribute.AttributeValue; if ( string.IsNullOrWhiteSpace( uriValue ) )//对于空路径暂不作处理。 return; Uri absoluteUri; if ( Uri.TryCreate( uriValue, UriKind.Absolute, out absoluteUri ) )//对于绝对 URI,不采取任何动作。 return; if ( VirtualPathUtility.IsAbsolute( uriValue ) )//对于绝对路径,也不采取任何动作。 return; if ( uriValue.StartsWith( "#" ) )//若是本路径的片段链接,也不采取任何动作。 return; if ( uriValue.StartsWith( "?" ) )//若是本路径的查询链接,也不采取任何动作。 return; attribute.SetValue( ResolveVirtualPath( baseVirtualPath, uriValue ) ); }