기본적으로 생성 할 RC1에서 ASP.NET-MVC보기에 대한 'CodeBehind'파일을 얻는 방법

StackOverflow https://stackoverflow.com/questions/489415

  •  20-08-2019
  •  | 
  •  

문제

RC1에서 뷰를 만들기위한 템플릿의 동작이 변경되었습니다.

Scott Gu의 게시물에 대해 설명했듯이 릴리스 후보 새로 생성 된 ASPX View에는 더 이상 기본적으로 Code-BeHind 파일이 없습니다.

피드백을 기반으로 View-Template가 기본적으로 코드-비만 파일이 없도록 변경했습니다. 이 변경은 MVC 응용 프로그램 (순전히 렌더링 및 비 렌더링 관련 코드를 포함하지 않도록 의도 된)에서 뷰의 목적을 강화하는 데 도움이되며 대부분의 사람들은 프로젝트에서 사용되지 않은 파일을 제거합니다.

RC 빌드는 이제 제네릭을 사용하는 기본 클래스에서 뷰 템플릿을 상속하기위한 C# 및 VB 구문 지원을 추가합니다. 예를 들어, 아래는 edit.aspx view 템플릿과 함께 사용하고 있습니다.

나는 코드 비어에 특정 코드를 작성하여보기를 출력하기 위해 뷰를 작성하는 것을 정말로 좋아합니다. 특히 페이지의 여러 부분에서 논리가 반복되는 경우 부분보기를 정당화 할 수 없습니다.

내 실제 질문 : 스콧이 말했다 기본적으로 - 그 행동을 바꿀 수 있음을 의미하지만 어디에 있는지 볼 수는 없습니다. 가능합니까? CodeBehind 파일을 수동으로 만들고 주변의 변화를 바꾸는 것은 고통입니다.

이것은 또한 추가 문제를 일으킨다 :

  • 내 모델의 이름을 리팩토링하면보기의 지침이 업데이트되지 않습니다. 이것은 세상의 끝이 아니라 완전히 타이핑하는 것의 뚜렷한 장점 중 하나입니다.

부록: 내가 왜 코드를 원하는지 궁금해하는 사람들에게 가능한 이유 중 일부가 여기에 있습니다. 이것은 내가 생각한 모든 것에 대한 누적 목록입니다. 이미 모델에있는 것 이외의 데이터에 액세스해서는 안된다는 것은 말할 필요도 없습니다. LINQ는 모델 데이터의 간단한 조작에 적합하지만 LINQ에서 SQL은 그렇지 않습니다! MVC는 이미 이것을 알고 있어야하는 사람들을위한 것입니다 - 그래서 내가 그것을 좋아하는 이유 - 똑똑한 사람들을 위해 똑똑한 사람들이 만든 것입니다.

  • 데이터베이닝 레거시 ASP.NET 컨트롤 - 대안을 사용할 수 없거나 임시 솔루션이 필요한 경우.
  • 중첩 또는 계층 적 HTML을 만들려면 재귀가 필요한 로직을 봅니다.
  • 임시 변수를 사용하는 논리를 봅니다. 나는 내 태그 수프에서 로컬 변수를 정의하는 것을 거부합니다! 나는 최소한보기 클래스의 속성으로 원한다.
  • 하나의보기 또는 모델에만 국한적이고 HtmlHelper에 속하지 않는 논리. 부수적으로 나는 htmlhelper가 어떤 '모델'클래스에 대해 알아야한다고 생각하지 않습니다. 모델 내부에 정의 된 클래스에 대해 알고 있다면 괜찮습니다 (예 : IEnumerable<Product>, 그러나 나는 예를 들어 당신이 ProductModel.
  • htmlhelper 메소드가 입력 할 때 모든 뷰에서 볼 수있게됩니다. Html+dot 그리고 나는이 목록을 가능한 한 최소화하고 싶습니다.
  • 사용하는 코드를 작성하려면 어떻게해야합니까? HtmlGenericControl 그리고 해당 네임 스페이스의 다른 클래스로 객체 지향 방식으로 HTML을 생성합니다 (또는 포트를 원하는 기존 코드가 있습니다).
  • 미래에 다른 뷰 엔진을 사용할 계획이라면 어떨까요? 나중에 재사용 할 수 있도록 태그 수프를 제외하고 논리의 일부를 유지하고 싶을 수도 있습니다.
  • 모델 클래스의 이름을 바꾸고 View.aspx로 이동하지 않고 클래스 이름을 변경하지 않고도 내보기를 자동으로 리팩터링 할 수있게하려면 어떻게해야합니까?
  • '태그 수프'를 엉망으로 만들지 않고 .aspx.cs 파일에서 매우 기본적인 루핑 이외의 것을 쓰고 싶다고 믿지 않는 HTML 디자이너와 조정하는 경우 어떻게해야합니까?

나는 사람들이 '코드-비만'에 대해 편견이 있다고 생각합니다. 왜냐하면 '뷰의 부분 클래스의 나머지 절반'과는 달리 '이벤트 처리 코드'를 의미하는 것으로 해석 되었기 때문입니다.

보기에 대한 코드-홀드는 괜찮습니다.

나는 그것이 폴더 구조를 약간 깎아내는 것에 동의하지 않는다. + 아이콘을위한 것입니다. 나는 단지 'Add View'를 사용하여 CodeBehind로보기를 만들 수 있기를 원합니다.

도움이 되었습니까?

해결책

귀하의 질문에 직접 답변하기 위해이 기본값을 변경할 수는 없습니다. 템플릿 수정 ( %programfiles % microsoft visual studio 9.0 common7 ide itemtemplates ")의 어딘가에있을 수 있지만 확실하지 않습니다.

그러나이 시나리오의 "MVC-way"는 아마도 별도의 클래스에서 사용자 정의 도우미를 만드는 것입니다.

나는 최근에 Gravatar를 사용한 웹 앱을 썼습니다 (http://www.gravatar.com) 프로필 사진을 생성하기 위해 동일한 관습을 계속 작성했습니다.u003Cimg> 내 뷰 전체에 태그가 있으므로 헬퍼를 만들었습니다 : html.gravatar ()

정적 클래스 "MyHelpers"또는 "GravatarHelpers"또는 "FooHelpers"를 작성하고 다음과 같은 서명으로 정적 확장 방법을 추가하십시오.

public static string Gravatar(this HtmlHelper htmlHelper, string emailAddress) {
    return htmlHelper.Image(...);
}

또는 강력하게 입력 된 뷰를 사용하는 경우 (ViewPageu003CT> ) 그리고 당신이 htmlhelper를 확장 할 수 있음을 활용하고 싶습니다.u003CT>

public static string Foo<TModel>(this HtmlHelper<TModel> htmlHelper, ...) {
    // Do stuff
    return // Stuff
}

UrlHelper 또는 AjaxHelper 용 htmlHelper를 쉽게 전환 할 수 있습니다. 나는 당신이 도우미의 ViewContext 속성에서 ViewData 등에 액세스 할 수 있다고 생각합니다.

다른 팁

정말 좋은 생각처럼 보이지 않습니다. 내가 읽은 모든 논평은 "코드를 사용하지 마십시오. 우리는 그것이 거기에 없기를 바랍니다"라고 말했습니다. 그리고 나는 동의합니다. 연장 방법 (전통적으로 HtmlHelper) 처럼 여기.

파일 뒤에있는 코드는 여전히 유용하다고 생각합니다. 많은 사람들이 MVC가 노력하는 디자인 패턴을 깨는 방법을 제공하기 때문에 자신이 어떻게 나쁜지에 대해 이야기하지만, 본질적으로 그렇게하지는 않습니다. 당신은 견해가 바보라고 가정 할 수 있지만, 그 견해가 복잡한 비즈니스 논리와 관련이 있다고 생각하지 않는다고 말하는 것이 더 정확하다고 생각합니다. 그러나 프레젠테이션의 측면과 자체적으로 관심을 가질 필요가 있습니다. 따라서 간단한 HTML 이외의 코드가 필요한 정보를 제시하는 요소가 여전히 있습니다. 마크 업이 코드가 필요한 곳을 지원하는 코드의 코드와 마크 업과 관련이 있다는 것은 우려의 분리 추론 (단지 뷰의 순수한 가독성)을 따릅니다.

Luis Abreu는 주제에 대한 좋은 기사를 썼습니다.

ASP.NET MVC의 CodeBehind 파일은 사악하지 않습니다

FYI- Visual Studio 2010에서보기가 포함 된 파일에 적절하게 명명 된 코드 파일을 추가하면 새 코드 - 비만 파일을 자동으로 뷰와 연결합니다. 파일을 제거하고 다시 링크 할 필요가 없습니다. 그러나 @harry가 설명하는대로 작동하도록 상속 클래스를 변경해야합니다.

또한 코드-홀드를 기본값으로 사용하고 싶습니다. 그래도 변경 방법을 찾을 수 없습니다. 이 페이지는 페이지에 CodeBehind를 추가하는 방법을 설명합니다. http://msdn.microsoft.com/en-us/magazine/cc301556.aspx.

내 의견으로는 코드-비만 클래스는 데이터베이닝 컨트롤에 이상적이며 (예 : 날짜 및 통화 형식) 필요한 경우 데이터를 약간 변경하는 데 이상적입니다. 또한 Repeaters는 데이터 목록을 표시하는 가장 쉬운 방법이지만 여전히 익명 유형 컬렉션을 통해 반복 할 수있는 방법을 찾을 수 없으며 페이지에 명령문이있는 경우 PHP : S를 상기시킵니다.

나는이 질문에 대답했다 여기:

부분보기에 코드-비만 페이지를 추가하는 방법

이것은 특히 까다 롭지 않은 것 같습니다.

확인.

첫째 : .cs (예 : View.ascx.cs)의 컨벤션과 함께 클래스 파일 추가

둘째 : "System.Web.MVC 사용"추가 수업에

셋째 : "ViewUserControl <>"에서 상속되도록 클래스를 변경하십시오.

넷째 : View의 헤더에 다음을 추가하십시오.

CodeBehind="View.ascx.cs" Inherits="Project.Views.Shared.View"

다섯 번째 : 솔루션에서 파일을 복사하고 다시 드래그하여 두 사람을 함께 재평가합니다.

참고 : 이것이 일반적인 MVC보기로 작동하려면 "ViewPage"에서 클래스를 상속하면됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top