2017-10-23 3 views
0

MVC로 옮겨온 이후로 나는 항상 공통적 인 작업을 수행하는 모든 뷰를 고수 할 수있는 재사용 가능한 "구성 요소"를 궁금해했습니다. 모든보기 및 해당 구성 요소 내에 jQuery가 포함됩니다. 저는 View Components에 대해 이야기하고 있습니다. 이들은 깔끔하지만, 아직 주소 나 전화 번호를 표시하는 것 이외에는 실용적인 필요성을 느끼지 못했습니다. 정말 대화식이 아닙니다.자바 코어를 사용하여 ASP.NET 코어에서 재사용 가능한 구성 요소를 만드는 방법

그렇다면 View Component에서이 작업을 수행 할 수 없다면 어떻게해야합니까? 자바 스크립트를 사용하는보기 구성 요소가 있는데, 이는 레이아웃에서 정의한 섹션을 참조 할 수 없었기 때문입니다. 나는 그것이 의도적으로 설계된 수십 개의 기사를 읽었습니다. 글쎄, 내 의견으로는, 이것은 가난한 디자인이고 비대화 형 (또는 제한된)이 구성 요소를 잠급니다. (범위가 지정된이 생성 될 때마다 새로운 요청) 범위 그리고

public class MyViewContext 
{ 
    public bool IsJqueryRequired { get; set; } 
    public object MyAwesomeSharedObject { get; set; } 
} 

디 컨테이너에 추가 :

+0

난 당신이 몇 가지 요소를 공유 할 것입니다 의존성 삽입 컨테이너로 범위가 지정된 서비스'MyViewContext'을 추가합니다. 필요한 경우 간단하게 삽입하십시오. –

답변

0

내가 항상 궁금해 (지금 필요 해요) 내가 어떤보기에 충실 할 수있는 재사용 가능한 "구성 요소"한

나는 당신을 위해 무엇을 찾고있는 것은 templates 생각합니다. 모델에 디스플레이 및 편집기 템플릿을 사용할 수 있다는 점에서 재사용 할 수 있습니다. 그것은 꽤 많이 간단합니다 같은 :

재사용 :

public class Car 
{ 
    public string Model { get; set; } 
} 

컨트롤러 모델 :

public class IndexVM 
{ 
    public Car Car { get; set; } 
} 

index.cshtml

@model IndexVm 

@Html.DisplayFor(m => m.Car) 

공유/displaytemplates/car.cshtml

@model Car 

@Html.DisplayFor(m => m.Model) 

스크립트의 경우, 필요한 JS 만 렌더링하는 아이디어는 오래전에 사라졌습니다. 그것이 부트 스트랩에 bootstrap.min.js, bootstrap.min.css가있는 이유입니다. 번들을 모두 함께 사용하지 않아도되는 좋은 이유가 없으므로 클라이언트가 모든 것을 한 번에 캐시 할 수 있습니다.

구성 요소보기 구성 요소 MVC에서 다소 해커라고 느낍니다. MVC와 WebPages에서 으로 작동하지만 실제로 생각하지 못했습니다.

More Reading

+0

View 구성 요소에 대한 귀하의 생각에 동의합니다. 나는 템플릿을 사용하는 것에 대해 결코 생각하지 못했습니다. 나는 현재 다른 모델에 대한 편집기 템플릿을 사용하고 있으므로 모든 뷰의 "구성 요소"에 대해 동일한 개념을 적용 할 수 없습니다. 도움말 주셔서 감사합니다. – Keith

1

서비스를 만들기보기에

services.AddScoped<MyViewContext, MyViewContext>(); 

을 당신은이 방법에 액세스 할 수 있습니다

@inject MyViewContext MyViewContext 

다른 모든 곳에서는 constructor injection을 사용합니다.

또 다른 좋은 옵션은 TagHelper와 TagHelperContext입니다. Here은 멋진 기사입니다.

+0

@Christian의 답변 주셔서 감사합니다. 생성자 주입을 사용하는 개념은 실제로 많은 의미를 가지며 결과를 좋아하는지 살펴보아야 할 수도 있습니다. – Keith