@@ -391,10 +391,11 @@ internal static IEnumerable<ITableColumn> OrderFunc(this List<ITableColumn> cols
391391 /// <summary>
392392 /// RenderTreeBuilder 扩展方法 通过 IEditorItem 与 model 创建 Display 组件
393393 /// </summary>
394- /// <param name="builder"></param>
395- /// <param name="item"></param>
396- /// <param name="model"></param>
397- public static void CreateDisplayByFieldType ( this RenderTreeBuilder builder , IEditorItem item , object model )
394+ /// <param name="builder"><see cref="RenderTreeBuilder"/> 实例</param>
395+ /// <param name="item"><see cref="IEditorItem"/> 实例</param>
396+ /// <param name="model">当前模型对象实例</param>
397+ /// <param name="showTooltip">如果是 <see cref="Display{TValue}"/> 组件时是否显示提示栏 默认 false</param>
398+ public static void CreateDisplayByFieldType ( this RenderTreeBuilder builder , IEditorItem item , object model , bool showTooltip = false )
398399 {
399400 var fieldType = item . PropertyType ;
400401 var fieldName = item . GetFieldName ( ) ;
@@ -403,60 +404,80 @@ public static void CreateDisplayByFieldType(this RenderTreeBuilder builder, IEdi
403404 var type = ( Nullable . GetUnderlyingType ( fieldType ) ?? fieldType ) ;
404405 if ( type == typeof ( bool ) || fieldValue ? . GetType ( ) == typeof ( bool ) )
405406 {
406- builder . OpenComponent < Switch > ( 0 ) ;
407- builder . AddAttribute ( 10 , nameof ( Switch . Value ) , fieldValue ) ;
408- builder . AddAttribute ( 20 , nameof ( Switch . IsDisabled ) , true ) ;
409- builder . AddAttribute ( 30 , nameof ( Switch . DisplayText ) , displayName ) ;
410- builder . AddAttribute ( 40 , nameof ( Switch . ShowLabelTooltip ) , item . ShowLabelTooltip ) ;
411- if ( item is ITableColumn col )
412- {
413- builder . AddAttribute ( 50 , "class" , col . CssClass ) ;
414- }
415- builder . AddMultipleAttributes ( 60 , item . ComponentParameters ) ;
407+ builder . RenderSwitch ( item , fieldValue , displayName ) ;
416408 }
417409 else if ( item . ComponentType == typeof ( Textarea ) || item . Rows > 0 )
418410 {
419- builder . OpenComponent ( 0 , typeof ( Textarea ) ) ;
420- builder . AddAttribute ( 10 , nameof ( Textarea . DisplayText ) , displayName ) ;
421- builder . AddAttribute ( 20 , nameof ( Textarea . Value ) , fieldValue ) ;
422- builder . AddAttribute ( 30 , nameof ( Textarea . ShowLabelTooltip ) , item . ShowLabelTooltip ) ;
423- builder . AddAttribute ( 40 , "readonly" , true ) ;
424- if ( item . Rows > 0 )
425- {
426- builder . AddAttribute ( 50 , "rows" , item . Rows ) ;
427- }
428- if ( item is ITableColumn col )
429- {
430- builder . AddAttribute ( 60 , "class" , col . CssClass ) ;
431- }
432- builder . AddMultipleAttributes ( 70 , item . ComponentParameters ) ;
411+ builder . RenderTextarea ( item , fieldValue , displayName ) ;
433412 }
434413 else
435414 {
436- builder . OpenComponent ( 0 , typeof ( Display < > ) . MakeGenericType ( fieldType ) ) ;
437- builder . AddAttribute ( 10 , nameof ( Display < string > . DisplayText ) , displayName ) ;
438- builder . AddAttribute ( 20 , nameof ( Display < string > . Value ) , fieldValue ) ;
439- builder . AddAttribute ( 30 , nameof ( Display < string > . Lookup ) , item . Lookup ) ;
440- builder . AddAttribute ( 30 , nameof ( Display < string > . LookupService ) , item . LookupService ) ;
441- builder . AddAttribute ( 40 , nameof ( Display < string > . LookupServiceKey ) , item . LookupServiceKey ) ;
442- builder . AddAttribute ( 50 , nameof ( Display < string > . LookupServiceData ) , item . LookupServiceData ) ;
443- builder . AddAttribute ( 60 , nameof ( Display < string > . LookupStringComparison ) , item . LookupStringComparison ) ;
444- builder . AddAttribute ( 65 , nameof ( Display < string > . ShowLabelTooltip ) , item . ShowLabelTooltip ) ;
445- if ( item is ITableColumn col )
415+ builder . RenderDisplay ( item , fieldType , fieldValue , displayName , showTooltip ) ;
416+ }
417+ }
418+
419+ private static void RenderTextarea ( this RenderTreeBuilder builder , IEditorItem item , object ? fieldValue , string ? displayName )
420+ {
421+ builder . OpenComponent ( 0 , typeof ( Textarea ) ) ;
422+ builder . AddAttribute ( 10 , nameof ( Textarea . DisplayText ) , displayName ) ;
423+ builder . AddAttribute ( 20 , nameof ( Textarea . Value ) , fieldValue ) ;
424+ builder . AddAttribute ( 30 , nameof ( Textarea . ShowLabelTooltip ) , item . ShowLabelTooltip ) ;
425+ builder . AddAttribute ( 40 , "readonly" , true ) ;
426+
427+ if ( item . Rows > 0 )
428+ {
429+ builder . AddAttribute ( 50 , "rows" , item . Rows ) ;
430+ }
431+ if ( item is ITableColumn col )
432+ {
433+ builder . AddAttribute ( 60 , "class" , col . CssClass ) ;
434+ }
435+ builder . AddMultipleAttributes ( 70 , item . ComponentParameters ) ;
436+ builder . CloseComponent ( ) ;
437+ }
438+
439+ private static void RenderSwitch ( this RenderTreeBuilder builder , IEditorItem item , object ? fieldValue , string ? displayName )
440+ {
441+ builder . OpenComponent < Switch > ( 0 ) ;
442+ builder . AddAttribute ( 10 , nameof ( Switch . Value ) , fieldValue ) ;
443+ builder . AddAttribute ( 20 , nameof ( Switch . IsDisabled ) , true ) ;
444+ builder . AddAttribute ( 30 , nameof ( Switch . DisplayText ) , displayName ) ;
445+ builder . AddAttribute ( 40 , nameof ( Switch . ShowLabelTooltip ) , item . ShowLabelTooltip ) ;
446+
447+ if ( item is ITableColumn col )
448+ {
449+ builder . AddAttribute ( 50 , "class" , col . CssClass ) ;
450+ }
451+ builder . AddMultipleAttributes ( 60 , item . ComponentParameters ) ;
452+ builder . CloseComponent ( ) ;
453+ }
454+
455+ private static void RenderDisplay ( this RenderTreeBuilder builder , IEditorItem item , Type fieldType , object ? fieldValue , string ? displayName , bool showTooltip )
456+ {
457+ builder . OpenComponent ( 0 , typeof ( Display < > ) . MakeGenericType ( fieldType ) ) ;
458+ builder . AddAttribute ( 10 , nameof ( Display < > . DisplayText ) , displayName ) ;
459+ builder . AddAttribute ( 20 , nameof ( Display < > . Value ) , fieldValue ) ;
460+ builder . AddAttribute ( 30 , nameof ( Display < > . Lookup ) , item . Lookup ) ;
461+ builder . AddAttribute ( 35 , nameof ( Display < > . LookupService ) , item . LookupService ) ;
462+ builder . AddAttribute ( 40 , nameof ( Display < > . LookupServiceKey ) , item . LookupServiceKey ) ;
463+ builder . AddAttribute ( 50 , nameof ( Display < > . LookupServiceData ) , item . LookupServiceData ) ;
464+ builder . AddAttribute ( 60 , nameof ( Display < > . LookupStringComparison ) , item . LookupStringComparison ) ;
465+ builder . AddAttribute ( 65 , nameof ( Display < > . ShowLabelTooltip ) , item . ShowLabelTooltip ) ;
466+ builder . AddAttribute ( 66 , nameof ( Display < > . ShowTooltip ) , showTooltip ) ;
467+
468+ if ( item is ITableColumn col )
469+ {
470+ if ( col . Formatter != null )
446471 {
447- if ( col . Formatter != null )
448- {
449- builder . AddAttribute ( 70 , nameof ( Display < string > . FormatterAsync ) , CacheManager . GetFormatterInvoker ( fieldType , col . Formatter ) ) ;
450- }
451- else if ( ! string . IsNullOrEmpty ( col . FormatString ) )
452- {
453- builder . AddAttribute ( 80 , nameof ( Display < string > . FormatString ) , col . FormatString ) ;
454- }
455- builder . AddAttribute ( 90 , "class" , col . CssClass ) ;
472+ builder . AddAttribute ( 70 , nameof ( Display < > . FormatterAsync ) , CacheManager . GetFormatterInvoker ( fieldType , col . Formatter ) ) ;
473+ }
474+ else if ( ! string . IsNullOrEmpty ( col . FormatString ) )
475+ {
476+ builder . AddAttribute ( 80 , nameof ( Display < > . FormatString ) , col . FormatString ) ;
456477 }
457- builder . AddMultipleAttributes ( 100 , item . ComponentParameters ) ;
478+ builder . AddAttribute ( 90 , "class" , col . CssClass ) ;
458479 }
459-
480+ builder . AddMultipleAttributes ( 100 , item . ComponentParameters ) ;
460481 builder . CloseComponent ( ) ;
461482 }
462483
@@ -484,31 +505,31 @@ public static void CreateComponentByFieldType(this RenderTreeBuilder builder, Co
484505 builder . OpenComponent ( 0 , componentType ) ;
485506 if ( componentType . IsSubclassOf ( typeof ( ValidateBase < > ) . MakeGenericType ( fieldType ) ) )
486507 {
487- builder . AddAttribute ( 10 , nameof ( ValidateBase < string > . DisplayText ) , displayName ) ;
488- builder . AddAttribute ( 20 , nameof ( ValidateBase < string > . Value ) , fieldValue ) ;
489- builder . AddAttribute ( 30 , nameof ( ValidateBase < string > . ValueChanged ) , fieldValueChanged ) ;
490- builder . AddAttribute ( 40 , nameof ( ValidateBase < string > . ValueExpression ) , valueExpression ) ;
491- builder . AddAttribute ( 41 , nameof ( ValidateBase < string > . ShowRequired ) , GetRequired ( item , changedType ) ) ;
492- builder . AddAttribute ( 42 , nameof ( ValidateBase < string > . RequiredErrorMessage ) , item . RequiredErrorMessage ) ;
508+ builder . AddAttribute ( 10 , nameof ( ValidateBase < > . DisplayText ) , displayName ) ;
509+ builder . AddAttribute ( 20 , nameof ( ValidateBase < > . Value ) , fieldValue ) ;
510+ builder . AddAttribute ( 30 , nameof ( ValidateBase < > . ValueChanged ) , fieldValueChanged ) ;
511+ builder . AddAttribute ( 40 , nameof ( ValidateBase < > . ValueExpression ) , valueExpression ) ;
512+ builder . AddAttribute ( 41 , nameof ( ValidateBase < > . ShowRequired ) , GetRequired ( item , changedType ) ) ;
513+ builder . AddAttribute ( 42 , nameof ( ValidateBase < > . RequiredErrorMessage ) , item . RequiredErrorMessage ) ;
493514
494515 if ( ! item . CanWrite ( model . GetType ( ) , changedType , isSearch ) )
495516 {
496- builder . AddAttribute ( 50 , nameof ( ValidateBase < string > . IsDisabled ) , true ) ;
517+ builder . AddAttribute ( 50 , nameof ( ValidateBase < > . IsDisabled ) , true ) ;
497518 }
498519
499520 if ( item . ValidateRules != null )
500521 {
501- builder . AddAttribute ( 60 , nameof ( ValidateBase < string > . ValidateRules ) , item . ValidateRules ) ;
522+ builder . AddAttribute ( 60 , nameof ( ValidateBase < > . ValidateRules ) , item . ValidateRules ) ;
502523 }
503524
504525 if ( item . ShowLabelTooltip != null )
505526 {
506- builder . AddAttribute ( 70 , nameof ( ValidateBase < string > . ShowLabelTooltip ) , item . ShowLabelTooltip ) ;
527+ builder . AddAttribute ( 70 , nameof ( ValidateBase < > . ShowLabelTooltip ) , item . ShowLabelTooltip ) ;
507528 }
508529
509530 if ( skipValidate is true )
510531 {
511- builder . AddAttribute ( 71 , nameof ( ValidateBase < string > . SkipValidate ) , true ) ;
532+ builder . AddAttribute ( 71 , nameof ( ValidateBase < > . SkipValidate ) , true ) ;
512533 }
513534 }
514535
@@ -525,31 +546,31 @@ public static void CreateComponentByFieldType(this RenderTreeBuilder builder, Co
525546
526547 if ( IsCheckboxList ( fieldType , componentType ) && item . Items != null )
527548 {
528- builder . AddAttribute ( 90 , nameof ( CheckboxList < IEnumerable < string > > . Items ) , item . Items . Clone ( ) ) ;
549+ builder . AddAttribute ( 90 , nameof ( CheckboxList < > . Items ) , item . Items . Clone ( ) ) ;
529550 }
530551
531552 // Nullable<bool?>
532553 if ( item . ComponentType == typeof ( Select < bool ? > ) && fieldType == typeof ( bool ? ) && ! item . IsLookup ( ) && item . Items == null )
533554 {
534- builder . AddAttribute ( 100 , nameof ( Select < bool ? > . Items ) , GetNullableBoolItems ( model , fieldName ) ) ;
555+ builder . AddAttribute ( 100 , nameof ( Select < > . Items ) , GetNullableBoolItems ( model , fieldName ) ) ;
535556 }
536557
537558 // Lookup
538559 if ( item . IsLookup ( ) && item . Items == null )
539560 {
540- builder . AddAttribute ( 110 , nameof ( Select < SelectedItem > . ShowSearch ) , item . ShowSearchWhenSelect ) ;
541- builder . AddAttribute ( 115 , nameof ( Select < SelectedItem > . Items ) , item . Lookup ) ;
542- builder . AddAttribute ( 120 , nameof ( Select < SelectedItem > . LookupService ) , lookupService ) ;
543- builder . AddAttribute ( 121 , nameof ( Select < SelectedItem > . LookupServiceKey ) , item . LookupServiceKey ) ;
544- builder . AddAttribute ( 122 , nameof ( Select < SelectedItem > . LookupServiceData ) , item . LookupServiceData ) ;
545- builder . AddAttribute ( 130 , nameof ( Select < SelectedItem > . StringComparison ) , item . LookupStringComparison ) ;
561+ builder . AddAttribute ( 110 , nameof ( Select < > . ShowSearch ) , item . ShowSearchWhenSelect ) ;
562+ builder . AddAttribute ( 115 , nameof ( Select < > . Items ) , item . Lookup ) ;
563+ builder . AddAttribute ( 120 , nameof ( Select < > . LookupService ) , lookupService ) ;
564+ builder . AddAttribute ( 121 , nameof ( Select < > . LookupServiceKey ) , item . LookupServiceKey ) ;
565+ builder . AddAttribute ( 122 , nameof ( Select < > . LookupServiceData ) , item . LookupServiceData ) ;
566+ builder . AddAttribute ( 130 , nameof ( Select < > . StringComparison ) , item . LookupStringComparison ) ;
546567 }
547568
548569 // 增加非枚举类,手动设定 ComponentType 为 Select 并且 Items 有值 自动生成下拉框
549570 if ( item . Items != null && item . ComponentType == typeof ( Select < > ) . MakeGenericType ( fieldType ) )
550571 {
551- builder . AddAttribute ( 140 , nameof ( Select < SelectedItem > . Items ) , item . Items . Clone ( ) ) ;
552- builder . AddAttribute ( 150 , nameof ( Select < SelectedItem > . ShowSearch ) , item . ShowSearchWhenSelect ) ;
572+ builder . AddAttribute ( 140 , nameof ( Select < > . Items ) , item . Items . Clone ( ) ) ;
573+ builder . AddAttribute ( 150 , nameof ( Select < > . ShowSearch ) , item . ShowSearchWhenSelect ) ;
553574 }
554575
555576 // 设置 SkipValidate 参数
@@ -563,9 +584,9 @@ public static void CreateComponentByFieldType(this RenderTreeBuilder builder, Co
563584 builder . AddMultipleAttributes ( 180 , item . ComponentParameters ) ;
564585
565586 // 设置 IsPopover
566- if ( componentType . GetPropertyByName ( nameof ( Select < string > . IsPopover ) ) != null )
587+ if ( componentType . GetPropertyByName ( nameof ( Select < > . IsPopover ) ) != null )
567588 {
568- builder . AddAttribute ( 190 , nameof ( Select < string > . IsPopover ) , item . IsPopover ) ;
589+ builder . AddAttribute ( 190 , nameof ( Select < > . IsPopover ) , item . IsPopover ) ;
569590 }
570591 builder . CloseComponent ( ) ;
571592 }
@@ -825,7 +846,7 @@ public static string Format(object? source, IFormatProvider provider)
825846 var instance = Activator . CreateInstance ( typeof ( List < > ) . MakeGenericType ( t ) ) ;
826847 if ( instance != null )
827848 {
828- var mi = instance . GetType ( ) . GetMethod ( nameof ( List < string > . AddRange ) ) ;
849+ var mi = instance . GetType ( ) . GetMethod ( nameof ( List < > . AddRange ) ) ;
829850 if ( mi != null )
830851 {
831852 mi . Invoke ( instance , [ value ] ) ;
0 commit comments