ViewComponent
ASP.NET Core 3.0 (페이지)에서 서비스의 문자열 로 렌더링하려고합니다 .
내 문제에 대한 두 가지 부분적인 해결책을 찾았지만 둘 다 3.0 이전 버전에 대한 것이며 해결 방법을 모르는 몇 가지 문제가 있습니다.
NullView
3.0이 제거되었습니다 (참조를 찾기가 정말 어렵습니다).내 자신의 실험 중 일부를 수행했지만 작동하지 못했습니다 (게시 한 두 번째 솔루션과 동일한 문제에 직면했다고 생각합니다). 이 문제를 어떻게 작동시키는 지에 대한 도움을 주시면 감사하겠습니다. GitHub에 최선의 시도와 최소 프로젝트를 추가했습니다 . 여기서 Render는 Service 폴더에 있고 Index.cshtml.cs는 서비스에 대한 호출입니다.
감사!
NullView
지금은 내부 클래스입니다. 그러나 그것은 아무 일도하지 않는 아주 간단한 클래스입니다. 즉, src에서 소스 코드로 복사하여 붙여 넣기 만하면됩니다.위에서 링크 한 자습서는 일반보기를 렌더링하는 데 사용됩니다. 그러나 뷰 대신 뷰 구성 요소를 렌더링하려고 하므로 뷰 경로를 직접 전달 하지 않아야합니다 . 대신 ViewComponent 클래스 이름 (또는 유형 )을 전달해야 합니다.
Model = await _viewRender.RenderToStringAsync ("/Components/Test/Default.cshtml",// 뷰 파일을 렌더링하지 않고 뷰 컴포넌트 "Test"를 렌더링하므로 뷰 경로를 전달하지 않습니다 . //`ViewComponent `Name is Test new TestModel {StrToPrint = "Print From Service"});
공식 문서 에 따르면 런타임 은 다음 경로에서 뷰를 검색합니다 .
- / Views / {Controller Name} / Components / {View Component Name} / {View Name}
- / Views / Shared / Components / {구성 요소 이름보기} / {이름보기}
- / Pages / Shared / Components / {구성 요소 이름보기} / {이름보기}
그러나 귀하의 Test
ViewComponent가에있는 Pages/Components/Test/Default.cshtml
, 기본적으로 면도기에 의해 발견 할 수없는 . 사용자 지정보기 위치를 구성하거나 Razor가보기 파일을 찾을 수 있도록 표준 위치로 이동합니다.
마지막으로 ViewComponent를 페이지로 렌더링하는 것은 약간 과잉 인 것처럼 보입니다. 난 당신이 사용해야 제안 IViewComponentHelper
을 렌더링하기 위해 ViewComponent
int로서 IHtmlContent
내가 쓸 수 있도록 StringWriter
:
public class MyViewComponentContext
{
public HttpContext HttpContext { get; set; }
public ActionContext ActionContext { get; set; }
public ViewDataDictionary ViewData { get; set; }
public ITempDataDictionary TempData { get; set; }
}
private async Task<string> Render( MyViewComponentContext myViewComponentContext,string viewComponentName,object args) {
using (var writer = new StringWriter())
{
var helper = this.GetViewComponentHelper(myViewComponentContext, writer);
var result = await helper.InvokeAsync(viewComponentName, args); // get an IHtmlContent
result.WriteTo(writer, HtmlEncoder.Default);
await writer.FlushAsync();
return writer.ToString();
}
}
위에서 설명한대로 문제를 해결하면 프로젝트를 실행할 때 올바른 결과를 얻을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다