다음을 통해 공유


ASP.NET MVC 3

(2011년 4월 도구 업데이트 포함)

ASP.NET MVC 3은 잘 설정된 디자인 패턴과 ASP.NET 및 .NET Framework 사용하여 확장 가능한 표준 기반 웹 애플리케이션을 빌드하기 위한 프레임워크입니다.

ASP.NET MVC 2와 함께 설치되므로 지금 사용을 시작하세요!

여기에서 설치 관리자 다운로드

주요 기능

  • NuGet을 통해 확장 가능한 통합 스캐폴딩 시스템
  • HTML 5 지원 프로젝트 템플릿
  • 새 Razor 뷰 엔진을 포함한 표현 보기
  • 종속성 주입 및 전역 작업 필터를 사용하는 강력한 후크
  • 눈에 거슬리지 않는 JavaScript, jQuery 유효성 검사 및 JSON 바인딩을 사용하여 풍부한 JavaScript 지원
  • 아래의 전체 기능 목록을 읽어보세요.

ASP.NET MVC 3의 새로운 기능

설치 및 도움말

ASP.NET MVC 3 Overview

ASP.NET MVC 3은 ASP.NET MVC 1 및 2를 기반으로 빌드되며 코드를 간소화하고 더 심층적인 확장성을 허용하는 훌륭한 기능을 추가합니다. 이 항목에서는 다음 섹션으로 구성된 이 릴리스에 포함된 많은 새로운 기능에 대한 개요를 제공합니다.

MvcScaffold 통합을 사용하여 확장 가능한 스캐폴딩

새로운 스캐폴딩 시스템을 사용하면 프레임워크를 완전히 접하는 경우 생산성을 더 쉽게 선택하고 사용할 수 있으며, 경험이 있고 이미 무엇을 하고 있는지 알고 있는 경우 일반적인 개발 작업을 자동화할 수 있습니다.

MvcScaffolding이라는 새 NuGet 스캐폴딩 패키지에서 지원됩니다. "스캐폴딩"이라는 용어는 많은 소프트웨어 기술에서 "편집하고 사용자 지정할 수 있는 소프트웨어의 기본 개요를 신속하게 생성"하는 데 사용됩니다. ASP.NET MVC에 대해 만드는 스캐폴딩 패키지는 여러 시나리오에서 매우 유용합니다.

  • MVC를 처음으로 ASP.NET 학습하는 경우 유용한 작업 코드를 빠르게 얻을 수 있으므로 필요에 따라 편집하고 조정할 수 있습니다. 그것은 빈 페이지를보고 어디서부터 시작해야할지 전혀 모르는 트라우마에서 당신을 저장합니다!
  • ASP.NET MVC를 잘 알고 있고 개체 관계형 매퍼, 뷰 엔진, 테스트 라이브러리 등과 같은 새로운 추가 기능 기술을 탐색하는 경우 해당 기술의 작성자가 스캐폴딩 패키지를 만들었을 수도 있기 때문입니다.
  • 테스트 픽스처, 배포 스크립트 또는 필요한 다른 항목을 출력하는 사용자 지정 스캐폴더를 만들 수 있으므로 작업에 비슷한 클래스 또는 파일을 반복적으로 만드는 작업이 포함되는 경우 팀의 모든 사용자가 사용자 지정 스캐폴더를 사용할 수도 있습니다.

MvcScaffolding의 다른 기능은 다음과 같습니다.

  • C# 및 VB 프로젝트 지원
  • Razor 및 ASPX 뷰 엔진 지원
  • ASP.NET MVC 영역으로 스캐폴딩 및 사용자 지정 보기 레이아웃/마스터 사용 지원
  • T4 템플릿을 편집하여 출력을 쉽게 사용자 지정할 수 있습니다.
  • 사용자 지정 PowerShell 논리 및 사용자 지정 T4 템플릿을 사용하여 완전히 새로운 스캐폴더를 추가할 수 있습니다. 이러한 매개 변수와 지정한 사용자 지정 매개 변수는 콘솔 탭 완성 목록에 자동으로 표시됩니다.
  • 다양한 기술에 대한 추가 스캐폴더가 포함된 NuGet 패키지를 가져와서(예: 현재 LINQ to SQL 위한 개념 증명이 있음) 함께 혼합하고 일치시킬 수 있습니다.

ASP.NET MVC 3 도구 업데이트에는 다음과 같은 이 스캐폴딩 시스템에 대한 훌륭한 Visual Studio 지원이 포함되어 있습니다.

  • 컨트롤러 추가 대화 상자는 이제 컨트롤러 만들기, 읽기, 업데이트 및 삭제 작업 및 해당 뷰의 전체 자동 스캐폴딩을 지원합니다. 기본적으로 EF Code First를 사용하여 데이터 액세스 코드를 스캐폴드합니다.
  • 컨트롤러 추가 대화 상자는 MvcScaffolding과 같은 NuGet 패키지를 통해 확장 가능한 스캐폴드를 지원합니다. 이렇게 하면 사용자 지정 스캐폴드를 대화 상자에 연결하여 NHibernate 또는 ODBCDirect를 사용하는 JET와 같은 다른 데이터 액세스 기술에 대한 스캐폴드를 만들 수 있습니다.

ASP.NET MVC 3의 스캐폴딩에 대한 자세한 내용은 다음 리소스를 참조하세요.

HTML 5 프로젝트 템플릿

새 프로젝트 대화 상자에는 HTML 5 버전의 프로젝트 템플릿 사용 확인란이 포함되어 있습니다. 이러한 템플릿은 Modernizr 1.7을 활용하여 하위 수준 브라우저에서 HTML 5 및 CSS 3에 대한 호환성 지원을 제공합니다.

Razor 뷰 엔진

ASP.NET MVC 3에는 다음과 같은 이점을 제공하는 Razor라는 새 뷰 엔진이 제공됩니다.

  • Razor 구문은 클린 간결하며 최소 키 입력 수가 필요합니다.
  • Razor는 C# 및 Visual Basic과 같은 기존 언어를 기반으로 하기 때문에 학습하기 쉽습니다.
  • Visual Studio에는 Razor 구문에 대한 IntelliSense 및 코드 색 지정이 포함되어 있습니다.
  • Razor 뷰는 애플리케이션을 실행하거나 웹 서버를 시작할 필요 없이 단위 테스트를 수행할 수 있습니다.

몇 가지 새로운 Razor 기능에는 다음이 포함됩니다.

  • @model 뷰에 전달되는 형식을 지정하는 구문입니다.
  • @* *@ 주석 구문입니다.
  • 전체 사이트에 대해 기본값(예: layoutpage)을 한 번 지정하는 기능입니다.
  • Html.Raw HTML 인코딩 없이 텍스트를 표시하는 메서드입니다.
  • 여러 보기 간에 코드 공유 지원(_viewstart.cshtml 또는 _viewstart.vbhtml 파일).

Razor에는 다음과 같은 새 HTML 도우미도 포함되어 있습니다.

  • Chart. 차트를 렌더링하여 ASP.NET 4의 차트 컨트롤과 동일한 기능을 제공합니다.
  • WebGrid. 페이징 및 정렬 기능이 포함된 데이터 그리드를 렌더링합니다.
  • Crypto. 해시 알고리즘을 사용하여 올바르게 솔트되고 해시된 암호를 만듭니다.
  • WebImage. 이미지를 렌더링합니다.
  • WebMail. 이메일 메시지를 보냅니다.

Razor에 대한 자세한 내용은 다음 리소스를 참조하세요.

여러 보기 엔진에 대한 지원

ASP.NET MVC 3의 보기 추가 대화 상자를 사용하면 작업할 보기 엔진을 선택할 수 있으며 새 프로젝트 대화 상자를 사용하면 프로젝트의 기본 보기 엔진을 지정할 수 있습니다. ASPX(Web Forms 뷰 엔진), Razor 또는 Spark, NHaml 또는 NDjango와 같은 오픈 소스 뷰 엔진을 선택할 수 있습니다.

컨트롤러 개선 사항

전역 작업 필터

작업 메서드가 실행되기 전이나 작업 메서드가 실행된 후 논리를 수행하려는 경우가 있습니다. 이를 지원하기 위해 MVC 2 제공 작업 필터를 ASP.NET. 작업 필터는 특정 컨트롤러 작업 메서드에 사전 작업 및 사후 작업 동작을 추가하는 선언적 수단을 제공하는 사용자 지정 특성입니다. 그러나 경우에 따라 모든 작업 메서드에 적용되는 사전 작업 또는 사후 작업 동작을 지정할 수 있습니다. MVC 3을 사용하면 전역 필터를 컬렉션에 추가하여 지정할 수 GlobalFilters 있습니다. 전역 작업 필터에 대한 자세한 내용은 다음 리소스를 참조하세요.

새 "ViewBag" 속성

MVC 2 컨트롤러는 런타임에 바인딩된 사전 API를 사용하여 뷰 템플릿에 데이터를 전달할 수 있는 속성을 지원 ViewData 합니다. MVC 3에서는 속성과 함께 ViewBag 다소 간단한 구문을 사용하여 동일한 목적을 달성할 수도 있습니다. 예를 들어 를 작성하는 ViewData["Message"]="text"대신 를 작성 ViewBag.Message="text"할 수 있습니다. 속성을 사용하기 ViewBag 위해 강력한 형식의 클래스를 정의할 필요가 없습니다. 동적 속성이므로 속성을 가져오기 또는 설정할 수 있으며 런타임에 동적으로 resolve. 내부적으로 ViewBag 속성은 사전에 이름/값 쌍 ViewData 으로 저장됩니다. (참고: MVC 3의 대부분의 시험판 버전에서는 속성 이름이 ViewBag 속성으로 ViewModel 지정되었습니다.)

새 "ActionResult" 형식

MVC 3에서는 다음과 같은 ActionResult 형식과 해당 도우미 메서드가 새로 사용되거나 향상되었습니다.

  • HttpNotFoundResult. 클라이언트에 404 HTTP 상태 코드를 반환합니다.
  • RedirectResult. 부울 매개 변수에 따라 임시 리디렉션(HTTP 302 상태 코드) 또는 영구 리디렉션(HTTP 301 상태 코드)을 반환합니다. 이 변경 내용과 함께 컨트롤러 클래스에는 이제 영구 리디렉션을 수행하는 세 가지 메서드, 즉 , RedirectToRoutePermanentRedirectToActionPermanent가 있습니다RedirectPermanent. 이러한 메서드는 속성이 로 설정된 의 RedirectResultPermanent instance 반환합니다true.
  • HttpStatusCodeResult. 사용자가 지정한 HTTP 상태 코드를 반환합니다.

JavaScript 및 Ajax 개선 사항

기본적으로 MVC 3의 Ajax 및 유효성 검사 도우미는 눈에 거슬리지 않는 JavaScript 접근 방식을 사용합니다. 눈에 거슬리지 않는 JavaScript는 인라인 JavaScript를 HTML에 삽입하지 않습니다. 이렇게 하면 HTML이 더 작고 덜 복잡해지며 JavaScript 라이브러리를 더 쉽게 교환하거나 사용자 지정할 수 있습니다. MVC 3의 유효성 검사 도우미도 기본적으로 플러그 인을 jQueryValidate 사용합니다. MVC 2 동작을 원하는 경우 web.config 파일 설정을 사용하여 눈에 거슬리지 않는 JavaScript를 사용하지 않도록 설정할 수 있습니다. JavaScript 및 Ajax 개선 사항에 대한 자세한 내용은 다음 리소스를 참조하세요.

Client-Side 유효성 검사 기본적으로 사용

이전 버전의 MVC에서는 클라이언트 쪽 유효성 검사를 사용하도록 설정하기 위해 뷰에서 메서드를 명시적으로 호출 Html.EnableClientValidation 해야 합니다. MVC 3에서는 클라이언트 쪽 유효성 검사가 기본적으로 사용하도록 설정되어 있으므로 더 이상 필요하지 않습니다. ( web.config 파일의 설정을 사용하여 사용하지 않도록 설정할 수 있습니다.)

클라이언트 쪽 유효성 검사가 작동하려면 사이트에서 적절한 jQuery 및 jQuery 유효성 검사 라이브러리를 참조해야 합니다. 해당 라이브러리를 사용자 서버에서 호스트하거나 Microsoft 또는 Google의 CDN과 같은 CDN(콘텐츠 배달 네트워크)에서 참조할 수 있습니다.

원격 유효성 검사기

ASP.NET MVC 3은 jQuery 유효성 검사 플러그 인의 원격 유효성 검사기 지원을 활용할 수 있는 새 RemoteAttribute 클래스를 지원합니다. 이렇게 하면 클라이언트 쪽 유효성 검사 라이브러리가 서버 쪽에서만 수행할 수 있는 유효성 검사 논리를 수행하기 위해 서버에서 정의하는 사용자 지정 메서드를 자동으로 호출할 수 있습니다.

다음 예제에서 특성은 Remote 클라이언트 유효성 검사에서 필드의 유효성을 검사하기 위해 클래스에서 UsersController 라는 UserNameAvailable 작업을 호출하도록 UserName 지정합니다.

public class User 
{
    [Remote("UserNameAvailable", "Users")]
    public string UserName { get; set; }
}

다음 예제에서는 해당 컨트롤러를 보여줍니다.

public class UsersController 
{ 
    public bool UserNameAvailable(string username) 
    { 
        if(MyRepository.UserNameExists(username)) 
        { 
            return "false"; 
        } 
        return "true"; 
    } 
}

특성을 사용하는 Remote 방법에 대한 자세한 내용은 방법: MSDN 라이브러리 의 ASP.NET MVC에서 원격 유효성 검사 구현 을 참조하세요.

JSON 바인딩 지원

ASP.NET MVC 3에는 작업 메서드가 JSON으로 인코딩된 데이터를 수신하고 action-method 매개 변수에 모델 바인딩할 수 있는 기본 제공 JSON 바인딩 지원이 포함되어 있습니다. 이 기능은 클라이언트 템플릿 및 데이터 바인딩과 관련된 시나리오에서 유용합니다. (클라이언트 템플릿을 사용하면 클라이언트에서 실행되는 템플릿을 사용하여 단일 데이터 항목 또는 데이터 항목 집합의 서식을 지정하고 표시할 수 있습니다.) MVC 3을 사용하면 JSON 데이터를 보내고 받는 서버의 작업 메서드와 클라이언트 템플릿을 쉽게 연결할 수 있습니다. JSON 바인딩 지원에 대한 자세한 내용은 Scott Guthrie의 MVC 3 미리 보기 블로그 게시물의JavaScript 및 AJAX 개선 사항 섹션을 참조하세요.

모델 유효성 검사 개선 사항

"DataAnnotations" 메타데이터 특성

ASP.NET MVC 3은 과 같은 DisplayAttribute메타데이터 특성을 지원합니다DataAnnotations.

"ValidationAttribute" 클래스

클래스는 ValidationAttribute 유효성을 검사할 개체와 같이 현재 유효성 검사 컨텍스트에 대한 자세한 정보를 제공하는 새 IsValid 오버로드를 지원하기 위해 .NET Framework 4에서 개선되었습니다. 이렇게 하면 모델의 다른 속성을 기반으로 현재 값의 유효성을 검사할 수 있는 다양한 시나리오가 가능합니다. 예를 들어 새 CompareAttribute 특성을 사용하면 모델의 두 속성 값을 비교할 수 있습니다. 다음 예제에서 속성은 ComparePassword 유효하려면 필드와 Password 일치해야 합니다.

public class User
{ 
    [Required]
    public string Password { get; set; } 
    [Required, Compare("Password")] 
    public string ComparePassword { get; set; } 
}

유효성 검사 인터페이스

IValidatableObject 인터페이스를 사용하면 모델 수준 유효성 검사를 수행할 수 있으며, 전체 모델의 상태 또는 모델 내의 두 속성 간에 유효성 검사 오류 메시지를 제공할 수 있습니다. 이제 MVC 3은 모델 바인딩 시 IValidatableObject 인터페이스에서 오류를 검색하고 기본 제공 HTML 양식 도우미를 사용하여 보기 내에서 영향을 받는 필드에 자동으로 플래그를 지정하거나 강조 표시합니다.

IClientValidatable 인터페이스를 사용하면 ASP.NET MVC가 런타임에 유효성 검사기가 클라이언트 유효성 검사를 지원하는지 여부를 검색할 수 있습니다. 이 인터페이스는 다양한 유효성 검사 프레임워크와 통합될 수 있도록 설계되었습니다.

유효성 검사 인터페이스에 대한 자세한 내용은 Scott Guthrie의 MVC 3 미리 보기 블로그 게시물의모델 유효성 검사 개선 섹션을 참조하세요. 그러나 블로그의 "IValidateObject"에 대한 참조는 "IValidatableObject"여야 합니다.

종속성 주입 개선 사항

ASP.NET MVC 3은 DI(종속성 주입)를 적용하고 IOC(종속성 주입 또는 제어 반전) 컨테이너와 통합하는 데 더 나은 지원을 제공합니다. DI에 대한 지원이 다음 영역에 추가되었습니다.

  • 컨트롤러(컨트롤러 팩터리 등록 및 주입, 컨트롤러 주입).
  • 보기(보기 엔진 등록 및 삽입, 보기 페이지에 종속성 삽입)
  • 작업 필터(필터 찾기 및 삽입).
  • 모델 바인더(등록 및 삽입).
  • 모델 유효성 검사 공급자(등록 및 삽입).
  • 모델 메타데이터 공급자(등록 및 삽입).
  • 값 공급자(등록 및 삽입).

MVC 3은 Common Service Locator 라이브러리 및 해당 라이브러리의 IServiceLocator 인터페이스를 지원하는 모든 DI 컨테이너를 지원합니다. 또한 DI 프레임워크를 보다 쉽게 통합할 수 있는 새 IDependencyResolver 인터페이스를 지원합니다.

MVC 3의 DI에 대한 자세한 내용은 다음 리소스를 참조하세요.

기타 새로운 기능

NuGet 통합

ASP.NET MVC 3은 설치의 일부로 NuGet을 자동으로 설치하고 사용하도록 설정합니다. NuGet은 프로젝트에서 .NET 라이브러리 및 도구를 쉽게 찾고 설치하고 사용할 수 있는 무료 오픈 소스 패키지 관리자입니다. 모든 Visual Studio 프로젝트 형식(ASP.NET Web Forms 및 ASP.NET MVC 포함)에서 작동합니다.

NuGet을 사용하면 오픈 소스 프로젝트(예: Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks 및 Elmah와 같은 프로젝트)를 유지 관리하는 개발자가 라이브러리를 패키지하고 온라인 갤러리에 등록할 수 있습니다. 그런 다음 이러한 라이브러리 중 하나를 사용하여 패키지를 찾고 작업 중인 프로젝트에 설치하려는 .NET 개발자가 쉽게 설치할 수 있습니다.

ASP.NET 3 도구 업데이트를 통해 프로젝트 템플릿에는 미리 설치된 JavaScript 라이브러리 NuGet 패키지가 포함되어 있으므로 NuGet을 통해 업데이트할 수 있습니다. Entity Framework Code First도 NuGet 패키지로 미리 설치됩니다.

NuGet에 대한 자세한 내용은 NuGet 설명서를 참조하세요.

Partial-Page 출력 캐싱

ASP.NET MVC는 버전 1 이후 전체 페이지 응답의 출력 캐싱을 지원했습니다. MVC 3은 응답의 영역 또는 조각을 쉽게 캐시할 수 있는 부분 페이지 출력 캐싱도 지원합니다. 캐싱에 대한 자세한 내용은 MVC 3 릴리스 후보 및 MVC 3 릴리스 정보의 자식 작업 출력 캐싱 섹션에 있는 Scott Guthrie의 블로그 게시물의 부분 페이지 출력 캐싱 섹션을 참조하세요.

요청 유효성 검사에 대한 세분화된 제어

ASP.NET MVC에는 XSS 및 HTML 삽입 공격으로부터 자동으로 보호하는 데 도움이 되는 기본 제공 요청 유효성 검사가 있습니다. 그러나 사용자가 HTML 콘텐츠(예: 블로그 항목 또는 CMS 콘텐츠)를 게시하도록 허용하려는 경우와 같이 요청 유효성 검사를 명시적으로 사용하지 않도록 설정하려는 경우가 있습니다. 이제 모델에 AllowHtml 특성을 추가하거나 모델을 확인하여 모델 바인딩 중에 속성별로 요청 유효성 검사를 사용하지 않도록 설정할 수 있습니다. 요청 유효성 검사에 대한 자세한 내용은 다음 리소스를 참조하세요.

확장 가능한 "새 프로젝트" 대화 상자

ASP.NET MVC 3에서는 프로젝트 템플릿, 뷰 엔진 및 단위 테스트 프로젝트 프레임워크를 새 프로젝트 대화 상자에 추가할 수 있습니다.

템플릿 스캐폴딩 개선 사항

ASP.NET MVC 3 스캐폴딩 템플릿은 모델의 기본 키 속성을 식별하고 이전 버전의 MVC보다 적절하게 처리하는 더 나은 작업을 수행합니다. (예를 들어 스캐폴딩 템플릿은 이제 기본 키가 편집 가능한 양식 필드로 스캐폴드되지 않았는지 확인합니다.)

기본적으로 스캐폴드 만들기 및 편집은 이제 도우미 대신 도우미를 Html.TextBoxFor 사용합니다Html.EditorFor. 이렇게 하면 보기 추가 대화 상자에서 뷰를 생성할 때 데이터 주석 특성 형식으로 모델에 대한 메타데이터 지원이 향상됩니다.

"Html.LabelFor" 및 "Html.LabelForModel"에 대한 새 오버로드

LabelForModel 도우미 메서드에 대한 새 메서드 오버로드가 LabelFor 추가되었습니다. 새 오버로드를 사용하면 레이블 텍스트를 지정하거나 재정의할 수 있습니다.

세션리스 컨트롤러 지원

ASP.NET MVC 3에서는 컨트롤러 클래스가 세션 상태를 사용할지 여부와 세션 상태를 읽기/쓰기 또는 읽기 전용으로 사용할지 여부를 나타낼 수 있습니다. 세션리스 컨트롤러 지원에 대한 자세한 내용은 MVC 3 릴리스 정보를 참조하세요.

새 "AdditionalMetadataAttribute" 클래스

AdditionalMetadata 특성을 사용하여 모델 속성에 ModelMetadata.AdditionalValues 대한 사전을 채울 수 있습니다. 예를 들어 보기 모델에 관리자에게만 표시해야 하는 속성이 있는 경우 다음 예제와 같이 해당 속성에 주석을 달 수 있습니다.

public class ProductViewModel 
{
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}

이 메타데이터는 제품 보기 모델이 렌더링될 때 모든 디스플레이 또는 편집기 템플릿에서 사용할 수 있습니다. 메타데이터 정보를 해석하는 것은 사용자에게 달려 있습니다.

AccountController 개선 사항

인터넷 프로젝트 템플릿의 AccountController가 크게 개선되었습니다.

새 인트라넷 프로젝트 템플릿

Windows 인증을 사용하도록 설정하고 AccountController를 제거하는 새 인트라넷 프로젝트 템플릿이 포함되어 있습니다.