내 Taghelper (asp.net core2.0)에서 Action의 MethodInfo를 가져와야합니다. 컨트롤러, 액션, (또는 아마도 영역) 이름은 내가 가진 유일한 것입니다. 시작할 때 모든 작업을 수행하는 대신. 런타임에 동작의 MethodInfo (리플렉션 사용)를 동적으로 가져 오는 방법이 있습니까?asp.net 코어 mvc에서 컨트롤러 및 동작 이름별로 Action의 MethodInfo를 얻는 방법은 무엇입니까?
다음과 같은 방식으로, 속성의 컬렉션을 만들 수
0
A
답변
0
: 당신이 속성을 만든 경우 위의 대한
publicstring GetHyperlinkAttributes<TEntity>(string name)
{
PropertyInfo property = typeof(TEntity).GetProperty(name);
object[] attributes = property.GetCustomAttributes(false);
var collection = new List<string>();
foreach(Attribute attribute in attributes)
{
var hyperlink = attribute as HyperlinkAttribute;
if(!string.IsNullOrEmpty(hyperlink?.Target)
return hyperlink.Target;
}
return String.Empty;
}
따라서는, 당신이 전달 한 개체의 특성 Target
를 찾을 것 name 파라미터를 개입시킨 지정된 프로퍼티의 메소드 확장하려는 경우 typeof(TEntity).GetProperties()
을 통해 전체 개체를 반복 할 수 있습니다.
GetCustomAttributes
이 일부 속성을 추가하여 속성에있는 모든 속성을 반환합니다. 따라서 캐스트가있는 행은 개발자가 HyperLinkAttribute
속성을 필드에 추가하는 경우에 사용됩니다. 이것은 정리 될 수 있지만 함정에 당신을 알려주겠다고 생각했습니다.
그래서 다음과 같은 경우
이 존재 :[Target("https://microsoft.com")]
public string Example { get; set; }
위의 방법은 https://microsoft.com
을 반환합니다.
이제 까다로운 부분 - 태그 도우미. 내가 탐색이라는 객체를 생성,이 예에서
- :
은 그래서 위의 목표를 달성하지만, 몇 가지 단점이있다.public class TargetTagHelper : TagHelper { public string DestinationName { get; set; } public override Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "a"; var url = GetHyperLinkAttributes<Navigation>(DestinationName); output.Attributes.SetAttribute("href", url); output.Content.SetContent(url); } }
- 속성을 찾으려면 올바른 값을 마크 업해야합니다.
- 특성 또는 개체가 올바르게 매핑되지 않은 경우 문제 해결이 어려우며 쉽게 손상됩니다.
하지만 그 한계가 좋은 경우, 그것은 허용해야한다 :
<target destination-name="Microsoft">Microsoft</target>
일부 오류가 나는 빨리 쓴 존재 할 수있다. 그러나 이것은 견고한 출발점이되어야합니다.
무엇을하려고합니까? 액션은 컨트롤러 내의 메소드입니다. 태그 도우미를 사용하면 서버 측 코드에서 Razor 파일로 요소를 만들고 렌더링 할 수 있습니다. – Greg
HTML "a"태그를 확장하려고합니다. taghelper에서 asp-controller 및 asp-item 속성을 얻을 수 있습니다. 내 작업에 CustomAttribute를 추가했습니다. 이제는 주어진 CustomAttribute를 가져와야하는데, 주어진 컨트롤러와 액션 이름에 의해 MethodInfo를 먼저 가져와야한다고 생각합니다. – jyshih
하이퍼 링크에 메서드 정보를 표시하면 어떤 이점이 있습니까? 또는 링크에 설명 된 메서드와 관련된 사용자 지정 특성을 사용하려고합니까? – Greg