Asp.Net Core는 ViewComponent를 변수로 렌더링합니다.

자카 콘다

ViewComponentASP.NET Core 3.0 (페이지)에서 서비스의 문자열 로 렌더링하려고합니다 .

내 문제에 대한 두 가지 부분적인 해결책을 찾았지만 둘 다 3.0 이전 버전에 대한 것이며 해결 방법을 모르는 몇 가지 문제가 있습니다.

  • 첫 번째는 GitHub Gist 에서 가져 왔지만 컨트롤러를 염두에두고 설계되었으며 NullView3.0이 제거되었습니다 (참조를 찾기가 정말 어렵습니다).
  • 두 번째 옵션은 여기 에 있지만 한 줄에 실패합니다 (보기를 찾을 수 없음). 나는 이것이 .net 코어의 변경 사항 때문이라고 생각합니다. 여기서 뷰는 이제 미리 컴파일되고 면도기 뷰 엔진은이를 찾을 수 없습니다.

내 자신의 실험 중 일부를 수행했지만 작동하지 못했습니다 (게시 한 두 번째 솔루션과 동일한 문제에 직면했다고 생각합니다). 이 문제를 어떻게 작동시키는 지에 대한 도움을 주시면 감사하겠습니다. GitHub에 최선의 시도와 최소 프로젝트를 추가했습니다 . 여기서 Render는 Service 폴더에 있고 Index.cshtml.cs는 서비스에 대한 호출입니다.

감사!

Itminus

그 원인

  1. NullView지금은 내부 클래스입니다. 그러나 그것은 아무 일도하지 않는 아주 간단한 클래스입니다. 즉, src에서 소스 코드로 복사하여 붙여 넣기 만하면됩니다.
  2. 위에서 링크 한 자습서는 일반보기를 렌더링하는 데 사용됩니다. 그러나 뷰 대신 뷰 구성 요소를 렌더링하려고 하므로 뷰 경로를 직접 전달 하지 않아야합니다 . 대신 ViewComponent 클래스 이름 (또는 유형 )을 전달해야 합니다.

    Model = await _viewRender.RenderToStringAsync ( 
          
           
          "/Components/Test/Default.cshtml",
           // 뷰 파일을 렌더링하지 않고 뷰 컴포넌트 "Test"를 렌더링하므로 뷰 경로를 전달하지 않습니다
         .                             //`ViewComponent `Name is Test 
        new TestModel {StrToPrint = "Print From Service"});
        
         
         
          
         
         
    
  3. 공식 문서 에 따르면 런타임 은 다음 경로에서 뷰를 검색합니다 .

    1. / Views / {Controller Name} / Components / {View Component Name} / {View Name}
    2. / Views / Shared / Components / {구성 요소 이름보기} / {이름보기}
    3. / Pages / Shared / Components / {구성 요소 이름보기} / {이름보기}

    그러나 귀하의 TestViewComponent가에있는 Pages/Components/Test/Default.cshtml, 기본적으로 면도기에 의해 발견 할 수없는 . 사용자 지정보기 위치를 구성하거나 Razor가보기 파일을 찾을 수 있도록 표준 위치로 이동합니다.

  4. 마지막으로 ViewComponent를 페이지로 렌더링하는 것은 약간 과잉 인 것처럼 보입니다. 난 당신이 사용해야 제안 IViewComponentHelper을 렌더링하기 위해 ViewComponentint로서 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

asp.Net Core ViewComponent는 CSS를 표시하지 않습니다.

분류에서Dev

ViewComponent Asp.Net Core에서 현재 로그인 사용자를 얻는 방법

분류에서Dev

Asp.net Core 3.1은 렌더링 할 Razor 구성 요소를 찾을 수 없습니다.

분류에서Dev

HTML 페이지를 부트 스트랩 모달 ASP.NET MVC로 렌더링해야합니다.

분류에서Dev

ASP.NET CORE 컨트롤러 매개 변수를 사용하여 Razor 뷰를 문자열로 렌더링

분류에서Dev

Asp.Net MVC는 변수로 HtmlHelper를 호출합니다.

분류에서Dev

오류 : 다시 렌더링이 너무 많습니다. React는 렌더링 수를 제한합니다.

분류에서Dev

Recharts는 원형 차트를 세로로 렌더링합니다.

분류에서Dev

ASP.NET 내 보낸 Excel 시트를 다운로드하면 소스 페이지 자체가 렌더링되는 경우가 있습니다.

분류에서Dev

Django는 dict를 HTML 페이지로 렌더링합니다.

분류에서Dev

Safari는 각 렌더링에서 배열 요소를 다른 순서로 렌더링합니다.

분류에서Dev

Edge는 독일어 날짜를 Skype 링크로 렌더링합니다.

분류에서Dev

ASP.NET MVC 5 Html.HiddenFor는 잘못된 속성 값을 렌더링하지만 Model.Property는 올바른 값을 렌더링합니다.

분류에서Dev

ASP.Net Core는 체인 프로젝트 참조를 허용합니다.

분류에서Dev

조각 셰이더에서 사용하지 않는 변수는 렌더링 결과를 변경합니다.

분류에서Dev

ASP.NET Core-View에서 Controller로 Javascript 변수를 전달하는 방법

분류에서Dev

ASP.NET에서 매개 변수를 사용하여 UserControl을 렌더링하는 방법

분류에서Dev

Richtextbox는 렌더링 할 수없는 문자를 비활성화합니다.

분류에서Dev

jquery .append는 닫는 태그를 자동으로 렌더링합니다.

분류에서Dev

부분 면도기 페이지는 ASP .NET Core에서 렌더링되지 않습니다.

분류에서Dev

angularjs는 이미 서버 측 렌더링 페이지를 인수합니다.

분류에서Dev

jQuery는 요소를 렌더링 한 후 클릭 수신을 중지합니다.

분류에서Dev

rails는 자바 스크립트로 onclick보기를 렌더링합니다.

분류에서Dev

asp net core viewmodel 매개 변수를 문자열 URL로

분류에서Dev

ASP.Net Core MVC보기에서 ViewComponent 새로 고침

분류에서Dev

Angular JS는 범위 함수에서 변수를보고 비교할 수 있도록 렌더링합니다.

분류에서Dev

ASP .Net Razor : ViewBag 항목을 렌더링하고 문자를 바꿉니다.

분류에서Dev

오류 : 다시 렌더링이 너무 많습니다. React는 무한 루프를 방지하기 위해 렌더링 수를 제한합니다.

분류에서Dev

다시 렌더링이 너무 많습니다. React는 무한 루프 오류를 방지하기 위해 렌더링 수를 제한합니다.

Related 관련 기사

  1. 1

    asp.Net Core ViewComponent는 CSS를 표시하지 않습니다.

  2. 2

    ViewComponent Asp.Net Core에서 현재 로그인 사용자를 얻는 방법

  3. 3

    Asp.net Core 3.1은 렌더링 할 Razor 구성 요소를 찾을 수 없습니다.

  4. 4

    HTML 페이지를 부트 스트랩 모달 ASP.NET MVC로 렌더링해야합니다.

  5. 5

    ASP.NET CORE 컨트롤러 매개 변수를 사용하여 Razor 뷰를 문자열로 렌더링

  6. 6

    Asp.Net MVC는 변수로 HtmlHelper를 호출합니다.

  7. 7

    오류 : 다시 렌더링이 너무 많습니다. React는 렌더링 수를 제한합니다.

  8. 8

    Recharts는 원형 차트를 세로로 렌더링합니다.

  9. 9

    ASP.NET 내 보낸 Excel 시트를 다운로드하면 소스 페이지 자체가 렌더링되는 경우가 있습니다.

  10. 10

    Django는 dict를 HTML 페이지로 렌더링합니다.

  11. 11

    Safari는 각 렌더링에서 배열 요소를 다른 순서로 렌더링합니다.

  12. 12

    Edge는 독일어 날짜를 Skype 링크로 렌더링합니다.

  13. 13

    ASP.NET MVC 5 Html.HiddenFor는 잘못된 속성 값을 렌더링하지만 Model.Property는 올바른 값을 렌더링합니다.

  14. 14

    ASP.Net Core는 체인 프로젝트 참조를 허용합니다.

  15. 15

    조각 셰이더에서 사용하지 않는 변수는 렌더링 결과를 변경합니다.

  16. 16

    ASP.NET Core-View에서 Controller로 Javascript 변수를 전달하는 방법

  17. 17

    ASP.NET에서 매개 변수를 사용하여 UserControl을 렌더링하는 방법

  18. 18

    Richtextbox는 렌더링 할 수없는 문자를 비활성화합니다.

  19. 19

    jquery .append는 닫는 태그를 자동으로 렌더링합니다.

  20. 20

    부분 면도기 페이지는 ASP .NET Core에서 렌더링되지 않습니다.

  21. 21

    angularjs는 이미 서버 측 렌더링 페이지를 인수합니다.

  22. 22

    jQuery는 요소를 렌더링 한 후 클릭 수신을 중지합니다.

  23. 23

    rails는 자바 스크립트로 onclick보기를 렌더링합니다.

  24. 24

    asp net core viewmodel 매개 변수를 문자열 URL로

  25. 25

    ASP.Net Core MVC보기에서 ViewComponent 새로 고침

  26. 26

    Angular JS는 범위 함수에서 변수를보고 비교할 수 있도록 렌더링합니다.

  27. 27

    ASP .Net Razor : ViewBag 항목을 렌더링하고 문자를 바꿉니다.

  28. 28

    오류 : 다시 렌더링이 너무 많습니다. React는 무한 루프를 방지하기 위해 렌더링 수를 제한합니다.

  29. 29

    다시 렌더링이 너무 많습니다. React는 무한 루프 오류를 방지하기 위해 렌더링 수를 제한합니다.

뜨겁다태그

보관