ASP.NET MVC 2의 새로운 기능What's New in ASP.NET MVC 2

이 문서에서는 ASP.NET MVC 2에 도입 된 새로운 기능 및 향상 된 기능에 대해 설명 합니다.This document describes new features and improvements introduced in ASP.NET MVC 2. 이 문서도 다운로드할 수 있습니다.This document is also available for Download

간략하게 Introduction
ASP.NET MVC 1.0 프로젝트를 ASP.NET MVC 2로 업그레이드 Upgrading an ASP.NET MVC 1.0 Project to ASP.NET MVC 2
새 기능 New Features
템플릿 기반 도우미 Templated Helpers
영역인 Areas
비동기 컨트롤러에 대 한 지원 Support for Asynchronous Controllers
작업 메서드 매개 변수에서 DefaultValueAttribute 지원 Support for DefaultValueAttribute in Action-Method Parameters
모델 바인더를 사용 하 여 이진 데이터 바인딩 지원 Support for Binding Binary Data with Model Binders
ModelMetadata 및 ModelMetadataProvider 클래스 ModelMetadata and ModelMetadataProvider Classes
DataAnnotations 특성에 대 한 지원 Support for DataAnnotations Attributes
모델 유효성 검사기 공급자 Model-Validator Providers
클라이언트 쪽 유효성 검사 Client-Side Validation
Visual Studio 2010에 대 한 새 코드 조각 New Code Snippets for Visual Studio 2010
새 RequireHttpsAttribute 작업 필터 New RequireHttpsAttribute Action Filter
HTTP 메서드 동사 재정의 Overriding the HTTP Method Verb
템플릿 도우미에 대 한 새 HiddenInputAttribute 클래스 New HiddenInputAttribute Class for Templated Helpers
ValidationSummary 도우미 메서드는 모델 수준 오류를 표시할 수 있습니다. Html.ValidationSummary Helper Method Can Display Model-Level Errors
Visual Studio의 T4 템플릿은 .NET Framework API 향상의 대상 버전과 관련 된 코드를 생성API Improvements 합니다.T4 Templates in Visual Studio Generate Code that is Specific to the Target Version of the .NET FrameworkAPI Improvements
주요 변경 내용Breaking Changes
고지 사항Disclaimer

간략하게Introduction

ASP.NET MVC 2는 ASP.NET MVC 1.0을 기반으로 하며 생산성 향상에 중점을 두는 다양 한 향상 된 기능 및 기능을 소개 합니다.ASP.NET MVC 2 builds on ASP.NET MVC 1.0 and introduces a large set of enhancements and features that are focused on increasing productivity. 이 릴리스는 ASP.NET MVC 1.0와 호환 되므로 ASP.NET MVC 1.0의 모든 기술 자료, 기술, 코드 및 확장이 계속 적용 됩니다.This release is compatible with ASP.NET MVC 1.0, so all your knowledge, skills, code, and extensions for ASP.NET MVC 1.0 continue to apply.

ASP.NET MVC에 대 한 자세한 내용은 다음 리소스를 참조 하세요.For more information about ASP.NET MVC, visit the following resources:

ASP.NET MVC 1.0 프로젝트를 ASP.NET MVC 2로 업그레이드Upgrading an ASP.NET MVC 1.0 Project to ASP.NET MVC 2

ASP.NET MVC 2는 동일한 서버에 ASP.NET MVC 1.0와 함께 설치할 수 있습니다. 그러면 응용 프로그램 개발자가 ASP.NET MVC 1.0 응용 프로그램을 ASP.NET MVC 2로 업그레이드할 시기를 유연 하 게 선택할 수 있습니다.ASP.NET MVC 2 can be installed side by side with ASP.NET MVC 1.0 on the same server, which gives application developers flexibility in choosing when to upgrade an ASP.NET MVC 1.0 application to ASP.NET MVC 2. 업그레이드 하는 방법에 대 한 자세한 내용은 ASP.NET mvc 1.0 응용 프로그램을 ASP.NET mvc 2로 업그레이드문서를 참조 하세요.For information on how to upgrade, see the document Upgrading an ASP.NET MVC 1.0 Application to ASP.NET MVC 2.

새 기능New Features

이 섹션에서는 MVC 2 릴리스에 도입 된 기능을 설명 합니다.This section describes features that have been introduced in the MVC 2 release.

템플릿 기반 도우미Templated Helpers

템플릿 기반 도우미를 사용 하면 편집 및 표시를 위해 HTML 요소를 데이터 형식과 자동으로 연결할 수 있습니다.Templated helpers let you automatically associate HTML elements for edit and display with data types. 예를 들어 DateTime 형식의 데이터가 뷰에 표시 되는 경우에는 날짜 선택 UI 요소가 자동으로 렌더링 될 수 있습니다.For example, when data of type System.DateTime is displayed in a view, a date-picker UI element can be automatically rendered. 이는 ASP.NET Dynamic Data에서 필드 템플릿이 작동 하는 방법과 비슷합니다.This is similar to how field templates work in ASP.NET Dynamic Data. 자세한 내용은 MSDN 웹 사이트에서 템플릿 기반 도우미를 사용 하 여 데이터 표시 를 참조 하세요.For more information, see Using Templated Helpers to Display Data on the MSDN Web site.

영역인Areas

영역을 사용 하면 많은 수의 작은 섹션으로 많은 프로젝트를 구성 하 여 규모가 많은 웹 응용 프로그램의 복잡성을 관리할 수 있습니다.Areas let you organize a large project into multiple smaller sections in order to manage the complexity of a large Web application. 각 섹션 ("영역")은 일반적으로 규모가 많은 웹 사이트의 개별 섹션을 나타내며 관련 컨트롤러 및 뷰 집합을 그룹화 하는 데 사용 됩니다.Each section ("area") typically represents a separate section of a large Web site and is used to group related sets of controllers and views. 자세한 내용은 연습: MSDN 웹 사이트의 영역별로 ASP.NET MVC 응용 프로그램 구성 을 참조 하세요.For more information, see Walkthrough: Organizing an ASP.NET MVC Application by Areas on the MSDN Web site.

새 영역을 만들려면 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭 하 고 추가를 클릭 한 다음 영역을 클릭 합니다.To create a new area, in Solution Explorer, right-click the project, click Add, and then click Area. 그러면 영역 이름을 입력 하 라는 대화 상자가 표시 됩니다.This displays a dialog box that prompts you for the area name. 영역 이름을 입력 하면 Visual Studio에서 프로젝트에 새 영역을 추가 합니다.After you enter the area name, Visual Studio adds a new area to the project.

다음 그림은 두 개의 영역, 즉 관리자와 블로그를 포함 하는 프로젝트의 레이아웃 예를 보여 줍니다.The following figure shows an example layout for a project with two areas, Admin and Blogs.

영역을 만들 때 Visual Studio는 AreaRegistration에서 파생 되는 클래스를 각 영역에 추가 합니다.When you create an area, Visual Studio adds a class that derives from AreaRegistration to each area. 이 클래스는 다음 예제와 같이 영역과 해당 경로를 등록 하는 데 필요 합니다.This class is required in order to register the area and its routes, as shown in the following example:

namespace MyApplication.Areas.Blog {
    public class BlogAreaRegistration : AreaRegistration {
        public override string AreaName {
            get { return "blog"; }
        }

        public override void RegisterArea(AreaRegistrationContext context) {
            context.MapRoute(
                "blog_default",
                "blog/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );

            context.MapRoute(
                "blog_whatsnew",
                "whats-new",
                new { action = "WhatsNew", id = UrlParameter.Optional  }
            );
        }
    }
}

ASP.NET MVC 2의 기본 프로젝트 템플릿에는 Global.asax 파일의 코드에 있는 RegisterAllAreas 메서드에 대 한 호출이 포함 되어 있습니다.The default project template for ASP.NET MVC 2 includes a call to the RegisterAllAreas method in the code for the Global.asax file. 이 메서드는 AreaRegistration 클래스에서 파생 되는 모든 형식을 검색 하 여 형식의 인스턴스를 인스턴스화한 다음 인스턴스에서 RegisterArea 메서드를 호출 하 여 프로젝트의 각 영역을 등록 합니다.This method registers each area in the project by looking for all types that derive from the AreaRegistration class, instantiating an instance of the type, and then calling the RegisterArea method on the instance. 다음 예제에서는이 작업을 수행 하는 방법을 보여 줍니다.The following example shows how this is done.

public class MyMvcApplication : HttpApplication {

    void App_Start() {
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterRoutes(RouteCollection routes) {
        routes.MapRoute("default", "{controller}/{action}/{id}", ...);
    }
}

컨텍스트를 호출 하 여 RegisterArea 메서드에 네임 스페이스를 지정 하지 않는 경우 네임 스페이스. Add 메서드, 등록 클래스의 네임 스페이스는 기본적으로 사용 됩니다.If you do not specify the namespace in the RegisterArea method by calling the context.Namespaces.Add method, the namespace of the registration class is used by default.

비동기 컨트롤러에 대 한 지원Support for Asynchronous Controllers

이제 ASP.NET MVC 2를 사용 하 여 컨트롤러에서 요청을 비동기적으로 처리할 수 있습니다.ASP.NET MVC 2 now allows controllers to process requests asynchronously. 이로 인해 차단 작업 (예: 네트워크 요청)을 자주 호출 하 여 차단 되지 않는 요소를 호출 하는 서버를 허용 하 여 성능이 향상 될 수 있습니다.This can lead to performance gains by allowing servers which frequently call blocking operations (like network requests) to call non-blocking counterparts instead. 자세한 내용은 MSDN의 ASP.NET MVC에서 비동기 컨트롤러 사용 항목을 참조 하세요.For more information, see the Using an Asynchronous Controller in ASP.NET MVC topic on MSDN.

작업 메서드 매개 변수에서 DefaultValueAttribute 지원Support for DefaultValueAttribute in Action-Method Parameters

System.componentmodel 클래스를 사용 하면 인수 매개 변수에 대 한 기본값을 동작 메서드에 제공할 수 있습니다.The System.ComponentModel.DefaultValueAttribute class allows a default value to be supplied for the argument parameter to an action method. 예를 들어 다음 기본 경로가 정의 되어 있다고 가정 합니다.For example, assume that the following default route is defined:

{controller}/{action}/{id}

또한 다음과 같은 컨트롤러 및 작업 메서드가 정의 되어 있다고 가정 합니다.Also assume that the following controller and action method is defined:

public class ArticleController {
    public ActionResult View(int id, [DefaultValue(1)]int page) {
    }
}

다음 요청 Url은 앞의 예제에 정의 된 보기 작업 메서드를 호출 합니다.Any of the following request URLs will invoke the View action method that is defined in the preceding example.

  • /Article/View/123/Article/View/123
  • /Article/View/123? page = 1 (이전 요청과 효과적으로 같음)/Article/View/123?page=1 (Effectively the same as the previous request)
  • /Article/View/123? page = 2/Article/View/123?page=2

DefaultValueAttribute 특성이 없으면 페이지 인수가 값이 제공 되지 않은 null을 허용 하지 않는 값 형식 이므로 이전 목록의 첫 번째 URL이 작동 하지 않습니다.Without the DefaultValueAttribute attribute, the first URL from the preceding list would not work, because the page argument is a non-nullable value type whose value has not been provided.

코드가 Visual Basic 2010 또는 Visual c # 2010로 작성 된 경우 다음 예제와 같이 DefaultValueAttribute 특성 대신 선택적 매개 변수를 사용할 수 있습니다.If your code is written in Visual Basic 2010 or Visual C# 2010, you can use optional parameters instead of the DefaultValueAttribute attribute, as shown in the following example:

Function View(ByVal id As Integer, Optional ByVal page As Integer = 1) _
        As ActionResult
    ' ...
End Function

public ActionResult MyAction(int id, int page = 1) {
    // ...
}

모델 바인더를 사용 하 여 이진 데이터 바인딩 지원Support for Binding Binary Data with Model Binders

Base-64로 인코딩된 문자열로 이진 값을 인코딩하는 Html. 숨겨진 도우미의 새 오버 로드가 다음과 같이 두 가지 있습니다.There are two new overloads of the Html.Hidden helper that encode binary values as base-64-encoded strings:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);

public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);

일반적인 용도는 개체에 대 한 타임 스탬프를 뷰에 포함 하는 것입니다.A typical use is to embed a timestamp for an object in the view. 예를 들어 응용 프로그램에 다음 제품 개체가 포함 될 수 있습니다.For example, your application might include the following Product object:

public class Product {
    //... other properties ...	
    public byte[] TimeStamp {
        get;
        set;
    }
}

편집 폼은 다음 예제와 같이 폼에서 타임 스탬프 속성을 렌더링할 수 있습니다.An edit form can render the TimeStamp property in the form as shown in the following example:

<%@ Page Inherits="ViewPage<Product>" %>
<%= Html.Hidden("TimeStamp", Model.TimeStamp) %>

이 태그는 타임 스탬프 값을 포함 하는 숨겨진 input 요소를 다음 예제와 유사한 base-64로 인코딩된 문자열로 렌더링 합니다.This markup renders a hidden input element with the timestamp value as a base-64-encoded string that resembles the following example:

<input type="hidden" name="TimeStamp" value="QVNQLk5FVCBNVkMgaXMgZnVuIQ==" />

이 폼은 다음 예제와 같이 Product 형식의 인수를 포함 하는 작업 메서드에 게시 될 수 있습니다.This form might be posted to an action method that has an argument of type Product, as shown in the following example:

public ActionResult Edit(Product p) {
    // p.TimeStamp is populated from the form
}

작업 메서드에서 게시 된 base-64로 인코딩된 문자열을 바이트 배열로 변환 하기 때문에 TimeStamp 속성이 올바르게 채워집니다.In the action method, the TimeStamp property is populated correctly because the posted base-64-encoded string is converted to a byte array.

ModelMetadata 및 ModelMetadataProvider 클래스ModelMetadata and ModelMetadataProvider Classes

ModelMetadataProvider 클래스는 뷰 내에서 모델에 대 한 메타 데이터를 가져오기 위한 추상화를 제공 합니다.The ModelMetadataProvider class provides an abstraction for obtaining metadata for the model within a view. MVC 2에는 System.componentmodel 네임 스페이스의 특성에 의해 노출 되는 메타 데이터를 사용할 수 있도록 하는 기본 공급자가 포함 되어 있습니다.MVC 2 includes a default provider that makes available the metadata that is exposed by the attributes in the System.ComponentModel.DataAnnotations namespace. 데이터베이스 또는 XML 파일과 같은 다른 데이터 저장소에서 메타 데이터를 제공 하는 메타 데이터 공급자를 만들 수 있습니다.It is possible to create metadata providers that provide metadata from other data stores, such as databases or XML files.

ViewDataDictionary 클래스는 ModelMetadataProvider 클래스에 의해 모델에서 추출 된 메타 데이터를 포함 하는 ModelMetadata 개체를 노출 합니다.The ViewDataDictionary class exposes a ModelMetadata object that contains the metadata that is extracted from the model by the ModelMetadataProvider class. 이렇게 하면 템플릿 기반 도우미가이 메타 데이터를 사용 하 고 그에 따라 출력을 조정할 수 있습니다.This enables the templated helpers to consume this metadata and adjust their output accordingly.

자세한 내용은 Modelmetadatamodelmetadataprovider 클래스에 대 한 설명서를 참조 하세요.For more information, see the documentation for the ModelMetadata and ModelMetadataProvider classes.

DataAnnotations 특성에 대 한 지원Support for DataAnnotations Attributes

ASP.NET MVC 2는 입력 유효성 검사를 제공 하기 위해 모델에 바인딩할 때 범위 특성, RequiredAttribute, StringLengthAttribute 및 RegexAttribute 유효성 검사 특성 (System.componentmodel 네임 스페이스에 정의 됨)을 사용할 수 있도록 지원 합니다.ASP.NET MVC 2 supports using the RangeAttribute, RequiredAttribute, StringLengthAttribute, and RegexAttribute validation attributes (defined in the System.ComponentModel.DataAnnotations namespace) when you bind to a model in order to provide input validation.

자세한 내용은 MSDN 웹 사이트에서 방법: Dataannotations을 사용 하 여 모델 데이터 유효성 검사 특성 을 참조 하세요.For more information, see How to: Validate Model Data Using DataAnnotations Attributes on the MSDN Web site. 이러한 특성의 사용을 보여 주는 샘플 프로젝트는에서 다운로드할 수 있습니다 https://go.microsoft.com/fwlink/?LinkId=157753 .A sample project that illustrates the use of these attributes is available for download at https://go.microsoft.com/fwlink/?LinkId=157753.

모델 유효성 검사기 공급자Model-Validator Providers

모델 유효성 검사 공급자 클래스는 모델에 대 한 유효성 검사 논리를 제공 하는 추상화를 나타냅니다.The model-validation provider class represents an abstraction that provides validation logic for the model. ASP.NET MVC에는 System.componentmodel annotation 네임 스페이스에 포함 된 유효성 검사 특성을 기반으로 하는 기본 공급자가 포함 되어 있습니다.ASP.NET MVC includes a default provider based on validation attributes that are included in the System.ComponentModel.DataAnnotations namespace. 모델에 대 한 유효성 검사 규칙의 사용자 지정 매핑과 사용자 지정 유효성 검사 규칙을 정의 하는 고유한 유효성 검사 공급자를 만들 수도 있습니다.You can also create your own validation providers that define custom validation rules and custom mappings of validation rules to the model. 자세한 내용은 ModelValidatorProvider 클래스에 대 한 설명서를 참조 하세요.For more information, see the documentation for the ModelValidatorProvider class.

클라이언트 쪽 유효성 검사Client-Side Validation

모델 유효성 검사기 공급자 클래스는 클라이언트 쪽 유효성 검사 라이브러리에서 사용할 수 있는 JSON 직렬화 된 데이터 형식으로 브라우저에 유효성 검사 메타 데이터를 노출 합니다.The model-validator provider class exposes validation metadata to the browser in the form of JSON-serialized data that can be consumed by a client-side validation library. ASP.NET MVC 2에는 앞에서 설명한 DataAnnotations 네임 스페이스 유효성 검사 특성을 지 원하는 클라이언트 유효성 검사 라이브러리 및 어댑터가 포함 되어 있습니다.ASP.NET MVC 2 includes a client validation library and adapter that supports the DataAnnotations namespace validation attributes noted earlier. 공급자 클래스를 사용 하 여 JSON 데이터를 처리 하 고 대체 라이브러리로 호출 하는 어댑터를 작성 하 여 다른 클라이언트 유효성 검사 라이브러리를 사용할 수도 있습니다.The provider class also enables you to use other client-validation libraries by writing an adapter that processes the JSON data and calls into the alternate library.

Visual Studio 2010에 대 한 새 코드 조각New Code Snippets for Visual Studio 2010

ASP.NET MVC 2에 대 한 일련의 HTML 코드 조각이 Visual Studio 2010와 함께 설치 됩니다.A set of HTML code snippets for ASP.NET MVC 2 is installed with Visual Studio 2010. 이러한 코드 조각의 목록을 보려면 도구 메뉴에서 코드 조각 관리자를 선택 합니다.To view a list of these snippets, in the Tools menu, select Code Snippets Manager. 언어에 대해 HTML을 선택 하 고 위치에서 ASP.NET MVC 2를 선택 합니다.For the language, select HTML, and for location, select ASP.NET MVC 2. 코드 조각을 사용 하는 방법에 대 한 자세한 내용은 Visual Studio 설명서를 참조 하세요.For more information about how to use code snippets, see the Visual Studio documentation.

새 RequireHttpsAttribute 작업 필터New RequireHttpsAttribute Action Filter

ASP.NET MVC 2에는 작업 메서드 및 컨트롤러에 적용할 수 있는 새 RequireHttpsAttribute 클래스가 포함 되어 있습니다.ASP.NET MVC 2 includes a new RequireHttpsAttribute class that can be applied to action methods and controllers. 기본적으로이 필터는 비 SSL (HTTP) 요청을 SSL 사용 (HTTPS)으로 리디렉션합니다.By default, the filter redirects a non-SSL (HTTP) request to the SSL-enabled (HTTPS) equivalent.

HTTP 메서드 동사 재정의Overriding the HTTP Method Verb

REST 아키텍처 스타일을 사용 하 여 웹 사이트를 빌드할 때 HTTP 동사는 리소스에 대해 수행할 작업을 결정 하는 데 사용 됩니다.When you build a Web site by using the REST architectural style, HTTP verbs are used to determine which action to perform for a resource. REST를 사용 하려면 응용 프로그램이 GET, PUT, POST 및 DELETE를 비롯 한 일반적인 HTTP 동사의 전체 범위를 지원 해야 합니다.REST requires that applications support the full range of common HTTP verbs, including GET, PUT, POST, and DELETE.

ASP.NET MVC 2에는 작업 메서드에 적용할 수 있는 새로운 특성과 해당 기능 compact 구문이 포함 되어 있습니다.ASP.NET MVC 2 includes new attributes that you can apply to action methods and that feature compact syntax. 이러한 특성을 통해 ASP.NET MVC는 HTTP 동사를 기반으로 작업 메서드를 선택할 수 있습니다.These attributes enable ASP.NET MVC to select an action method based on the HTTP verb. 다음 예제에서 POST 요청은 첫 번째 작업 메서드를 호출 하 고 PUT 요청은 두 번째 작업 메서드를 호출 합니다.In the following example, a POST request will call the first action method and a PUT request will call the second action method.

[HttpPost]
public ActionResult Edit(int id)

[HttpPut]
public ActionResult Edit(int id, Tag tag)

이전 버전의 ASP.NET MVC에서 이러한 작업 메서드는 다음 예제와 같이 더 자세한 구문이 필요 합니다.In earlier versions of ASP.NET MVC, these action methods required more verbose syntax, as shown in the following example:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id) 

[AcceptVerbs(HttpVerbs.Put)] 
public ActionResult Edit(int id, Tag tag)

브라우저는 GET 및 POST HTTP 동사로 지원 하기 때문에 다른 동사가 필요한 작업에 게시할 수 없습니다.Because browsers support only the GET and POST HTTP verbs, it is not possible to post to an action that requires a different verb. 따라서 기본적으로 모든 RESTful 요청을 지원할 수는 없습니다.Thus it is not possible to natively support all RESTful requests.

그러나 POST 작업 중에 RESTful 요청을 지원 하기 위해 ASP.NET MVC 2는 새로운 HttpMethodOverride HTML 도우미 메서드를 소개 합니다.However, to support RESTful requests during POST operations, ASP.NET MVC 2 introduces a new HttpMethodOverride HTML helper method. 이 메서드는 폼에서 HTTP 메서드를 효과적으로 에뮬레이트하는 숨겨진 input 요소를 렌더링 합니다.This method renders a hidden input element that causes the form to effectively emulate any HTTP method. 예를 들어 HttpMethodOverride HTML 도우미 메서드를 사용 하 여 양식 제출이 PUT 또는 DELETE 요청으로 표시 되도록 할 수 있습니다.For example, by using the HttpMethodOverride HTML helper method, you can have a form submission appear be a PUT or DELETE request. HttpMethodOverride의 동작은 다음 특성에 영향을 줍니다.The behavior of HttpMethodOverride affects the following attributes:

  • HttpPostAttributeHttpPostAttribute
  • HttpPutAttributeHttpPutAttribute
  • HttpGetAttributeHttpGetAttribute
  • HttpDeleteAttributeHttpDeleteAttribute
  • AcceptVerbsAttributeAcceptVerbsAttribute

숨겨진 input 요소는 해당 이름을 X-HTTP 메서드 재정의로 설정 하 고 해당 값을 에뮬레이션할 HTTP 동사로 설정 합니다.The hidden input element has its name X-HTTP-Method-Override and its value set to the HTTP verb to emulate. 재정의 값은 HTTP 헤더 또는 쿼리 문자열 값에서 이름/값 쌍으로 지정할 수도 있습니다.The override value can also be specified in an HTTP header or in a query string value as a name/value pair.

이 재정의는 실제 요청이 POST 요청인 경우에만 사용할 수 있습니다.The override can only be used when the real request is a POST request. 다른 HTTP 동사를 사용 하는 요청에 대해서는 재정의 값이 무시 됩니다.The override value will be ignored for requests that use any other HTTP verb.

템플릿 도우미에 대 한 새 HiddenInputAttribute 클래스New HiddenInputAttribute Class for Templated Helpers

모델 속성에 새 HiddenInputAttribute 특성을 적용 하 여 편집기 템플릿에 모델을 표시할 때 숨겨진 input 요소를 렌더링할지 여부를 지정할 수 있습니다.You can apply the new HiddenInputAttribute attribute to a model property to indicate whether a hidden input element should be rendered when displaying the model in an editor template. 특성은 HiddenInput의 암시적 UIHint 값을 설정 합니다.(The attribute sets an implicit UIHint value of HiddenInput). 특성의 DisplayValue 속성을 사용 하 여 편집기 및 디스플레이 모드에서 값을 표시할지 여부를 지정할 수 있습니다.The attribute's DisplayValue property lets you specify whether the value is displayed in editor and display modes. DisplayValue를 false로 설정 하면 일반적으로 필드를 둘러싸는 HTML 태그 뿐만 아니라 아무것도 표시 되지 않습니다.When DisplayValue is set to false, nothing is displayed, not even the HTML markup that normally surrounds a field. DisplayValue의 기본값은 true입니다.The default value for DisplayValue is true.

다음 시나리오에서 HiddenInputAttribute 특성을 사용할 수 있습니다.You might use HiddenInputAttribute attribute in the following scenarios:

  • 뷰를 통해 사용자가 개체의 ID를 편집할 수 있으며, 값을 표시 하 고, 이전 ID를 포함 하는 숨겨진 input 요소를 제공 하 여 컨트롤러에 다시 전달할 수 있도록 해야 합니다.When a view lets users edit the ID of an object and it is necessary to display the value as well as to provide a hidden input element that contains the old ID so that it can be passed back to the controller.
  • 뷰를 사용 하 여 timestamp 속성과 같이 사용자가 표시 되지 않아야 하는 이진 속성을 편집할 수 있습니다.When a view lets users edit a binary property that should never be displayed, such as a timestamp property. 이 경우 값과 주변 HTML 태그 (예: 레이블 및 값)가 표시 되지 않습니다.In that case, the value and surrounding HTML markup (such as the label and value) are not displayed.

다음 예제에서는 HiddenInputAttribute 클래스를 사용 하는 방법을 보여 줍니다.The following example shows how to use the HiddenInputAttribute class.

public class ProductViewModel {
    [HiddenInput] // equivalent to [HiddenInput(DisplayValue=true)]
    public int Id { get; set; }

    public string Name { get; set; }

    [HiddenInput(DisplayValue=false)]
    public byte[] TimeStamp { get; set; }
}

특성을 true로 설정 하거나 매개 변수를 지정 하지 않은 경우 다음 작업이 수행 됩니다.When the attribute is set to true (or no parameter is specified), the following occurs:

  • 표시 템플릿에서 레이블이 렌더링 되 고 사용자에 게 값이 표시 됩니다.In display templates, a label is rendered and the value is displayed to the user.
  • 편집기 템플릿에서 레이블이 렌더링 되 고 숨겨진 input 요소에서 값이 렌더링 됩니다.In editor templates, a label is rendered and the value is rendered in a hidden input element.

특성을 false로 설정 하면 다음 작업이 수행 됩니다.When the attribute is set to false, the following occurs:

  • 표시 템플릿에서는 해당 필드에 대해 아무것도 렌더링 되지 않습니다.In display templates, nothing is rendered for that field.
  • 편집기 템플릿에서는 레이블이 렌더링 되지 않으며 값이 숨겨진 input 요소에 렌더링 됩니다.In editor templates, no label is rendered and the value is rendered in a hidden input element.

ValidationSummary 도우미 메서드는 모델 수준 오류를 표시할 수 있습니다.Html.ValidationSummary Helper Method Can Display Model-Level Errors

모든 유효성 검사 오류를 항상 표시 하는 대신 ValidationSummary 도우미 메서드에 모델 수준 오류만 표시 하는 새로운 옵션이 있습니다.Instead of always displaying all validation errors, the Html.ValidationSummary helper method has a new option to display only model-level errors. 이렇게 하면 각 필드 옆에 표시 될 유효성 검사 요약 및 필드 관련 오류에 모델 수준 오류가 표시 됩니다.This enables model-level errors to be displayed in the validation summary and field-specific errors to be displayed next to each field.

Visual Studio의 T4 템플릿은 .NET Framework 대상 버전과 관련 된 코드를 생성 합니다.T4 Templates in Visual Studio Generate Code that is Specific to the Target Version of the .NET Framework

응용 프로그램에서 사용 하는 .NET Framework 버전을 지정 하는 ASP.NET MVC T4 호스트의 T4 파일에 새 속성을 사용할 수 있습니다.A new property is available to T4 files from the ASP.NET MVC T4 host that specifies the version of the .NET Framework that is used by the application. 이렇게 하면 T4 템플릿이 .NET Framework 버전에 해당 하는 코드와 태그를 생성할 수 있습니다.This enables T4 templates to generate code and markup that is specific to a version of the .NET Framework. Visual Studio 2008에서 값은 항상 .NET 3.5입니다.In Visual Studio 2008, the value is always .NET 3.5. Visual Studio 2010에서 값은 .NET 3.5 또는 .NET 4입니다.In Visual Studio 2010, the value is either .NET 3.5 or .NET 4.

API 향상API Improvements

이 섹션에서는 기존 ASP.NET MVC 형식 및 멤버의 변경 내용에 대해 설명 합니다.This section describes changes to existing ASP.NET MVC types and members.

  • Controller 클래스에 보호 된 가상 CreateActionInvoker 메서드를 추가 했습니다.Added a protected virtual CreateActionInvoker method in the Controller class. 이 메서드는 컨트롤러의 ActionInvoker 속성에 의해 호출 되며 호출자가 이미 설정 되지 않은 경우 호출자의 지연 인스턴스화를 허용 합니다.This method is invoked by the ActionInvoker property of Controller and allows for lazy instantiation of the invoker if no invoker is already set.
  • AuthorizeAttribute 클래스에 보호 된 가상 HandleUnauthorizedRequest 메서드를 추가 했습니다.Added a protected virtual HandleUnauthorizedRequest method in the AuthorizeAttribute class. 이렇게 하면 권한 부여가 실패할 때 AuthorizeAttribute에서 파생 되는 필터가 동작을 제어할 수 있습니다.This enables filters that derive from AuthorizeAttribute to control the behavior when authorization fails.
  • ValueProviderDictionary 클래스에서 추가 (문자열 키, 개체 값) 메서드를 추가 했습니다.Added an Add(string key, object value) method in the ValueProviderDictionary class. 이렇게 하면 다음 예제와 같이 ValueProviderDictionary에 대 한 사전 이니셜라이저 구문을 사용할 수 있습니다.This enables you to use the dictionary initializer syntax for ValueProviderDictionary, as in the following example:
Controller c = new MyController();
c.ValueProvider = new ValueProviderDictionary(null) {
    { "example1", "example1Value" },
    { "example2", "example2Value" },
    { "example3", new int[] { 1, 2, 3 } }
};
  • _AjaxContext 클래스에 get object 메서드를 추가 했습니다.Added a get_object method in the Sys.Mvc.AjaxContext class. Get data 메서드와 비슷한 JavaScript 메서드입니다. _ 응답의 콘텐츠 형식이 application/json 인 경우 get _ OBJECT는 json 개체를 반환 합니다.This is a JavaScript method that is similar to the get_data method, but if the content type of the response is application/json, get_object returns the JSON object.
  • AuthorizationContext 클래스에서 ActionDescriptor 속성을 추가 했습니다.Added an ActionDescriptor property in the AuthorizationContext class.
  • UrlParameter를 추가 했습니다. 폼 게시에 속성이 없을 때 ID 속성이 포함 된 모델에 바인딩할 때 문제를 해결 하는 데 사용할 수 있는 선택적 토큰입니다.Added a UrlParameter.Optional token that can be used to work around problems when binding to a model that contains an ID property when the property is absent in a form post. 자세한 내용은 Phil Haack의 블로그에서 ASP.NET MVC 2 선택적 URL 매개 변수 항목을 참조 하세요.For more detail, see the entry ASP.NET MVC 2 Optional URL Parameters on Phil Haack's blog.

주요 변경 내용Breaking Changes

다음 변경 내용으로 인해 기존 ASP.NET MVC 1.0 응용 프로그램에서 오류가 발생할 수 있습니다.The following changes might cause errors in existing ASP.NET MVC 1.0 applications.

IDataErrorInfo을 구현 하는 클래스에 대 한 속성 유효성 검사 동작 변경Change in property validation behavior for classes that implement IDataErrorInfo

IDataErrorInfo를 사용 하 여 유효성 검사를 수행 하는 모델 개체의 경우 새 값이 설정 되었는지 여부에 관계 없이 모든 속성의 유효성이 검사 됩니다.For model objects that use IDataErrorInfo to perform validation, every property is validated, regardless of whether a new value was set. ASP.NET MVC 1.0에서는 새 값 집합이 설정 된 속성만 확인 되었습니다.In ASP.NET MVC 1.0, only properties that had new values set were validated. ASP.NET MVC 2에서 IDataErrorInfo의 Error 속성은 모든 속성 유효성 검사기가 성공한 경우에만 호출 됩니다.In ASP.NET MVC 2, the Error property of IDataErrorInfo is called only if all the property validators were successful.

IIS 스크립트 매핑 스크립트는 설치 관리자에서 더 이상 사용할 수 없습니다.IIS script mapping script is no longer available in the installer

IIS 스크립트 매핑 스크립트는 클래식 모드에서 iis 6 및 iis 7에 대 한 스크립트 맵을 구성 하는 데 사용 되는 명령줄 스크립트입니다.The IIS script-mapping script is a command-line script that is used to configure script maps for IIS 6 and for IIS 7 in Classic mode. Visual Studio 개발 서버를 사용 하거나 통합 모드에서 IIS 7을 사용 하는 경우 스크립트 매핑 스크립트가 필요 하지 않습니다.The script-mapping script is not needed if you use the Visual Studio Development Server or if you use IIS 7 in Integrated mode. 스크립트는 ASP.NET WebStack에서 별도의 지원 되지 않는 다운로드로 사용할 수 있습니다.The scripts are available as a separate unsupported download on the ASP.NET WebStack.

MVC 퓨처의 Html. 대체 도우미 메서드는 더 이상 사용할 수 없습니다.The Html.Substitute helper method in MVC Futures is no longer available

MVC 뷰 엔진의 렌더링 동작 변경으로 인해 Html. 대체 도우미 메서드는 작동 하지 않고 제거 되었습니다.Due to changes in the rendering behavior of MVC view engines, the Html.Substitute helper method does not work and has been removed.

IValueProvider 인터페이스는 IDictionary의 모든 용도를 대체 합니다.The IValueProvider interface replaces all uses of IDictionary

MVC 1.0에서 IDictionary를 수락한 모든 속성 또는 메서드 인수는 이제 IValueProvider를 허용 합니다.Every property or method argument that accepted IDictionary in MVC 1.0 now accepts IValueProvider. 이 변경 내용은 사용자 지정 값 공급자 또는 사용자 지정 모델 바인더를 포함 하는 응용 프로그램에만 적용 됩니다.This change affects only applications that include custom value providers or custom model binders. 이러한 변경의 영향을 받는 속성 및 메서드의 예는 다음과 같습니다.Examples of properties and methods that are affected by this change include the following:

  • ControllerBase 및 ModelBindingContext 클래스의 ValueProvider 속성입니다.The ValueProvider property of the ControllerBase and ModelBindingContext classes.
  • Controller 클래스의 TryUpdateModel 메서드The TryUpdateModel methods of the Controller class.

새 CSS 클래스가 사이트 .css 파일에 추가 되었습니다.New CSS classes were added in the Site.css file

ASP.NET MVC 프로젝트 템플릿의 사이트 .css 파일은 유효성 검사 기능 및 템플릿 기반 도우미에서 사용 하는 새 스타일을 포함 하도록 업데이트 되었습니다.The Site.css file in the ASP.NET MVC project templates has been updated to include new styles used by the validation functionality and by the templated helpers.

이제 도우미가 MvcHtmlString 개체를 반환 합니다.Helpers now return an MvcHtmlString object

ASP.NET 4에서 새로운 HTML 인코딩 식 구문을 활용 하기 위해 이제는 HTML 도우미의 반환 형식이 문자열 대신 MvcHtmlString 됩니다.In order to take advantage of the new HTML-encoding expression syntax in ASP.NET 4, the return type for HTML helpers is now MvcHtmlString instead of a string. ASP.NET MVC 2를 사용 하 고 ASP.NET 3.5에서 새 도우미를 사용 하는 경우에는 HTML 인코딩 구문을 활용할 수 없습니다. 새 구문은 ASP.NET 4에서 ASP.NET MVC 2를 실행 하는 경우에만 사용할 수 있습니다.If you use ASP.NET MVC 2 and the new helpers on ASP.NET 3.5, you will not be able to take advantage of the HTML-encoding syntax; the new syntax is available only when you run ASP.NET MVC 2 on ASP.NET 4.

이제 JsonResult는 HTTP POST 요청에만 응답 합니다.JsonResult now responds only to HTTP POST requests

정보 공개 가능성이 있는 JSON 하이재킹 공격을 완화 하기 위해 기본적으로 JsonResult 클래스는 이제 HTTP POST 요청에만 응답 합니다.In order to mitigate JSON hijacking attacks that have the potential for information disclosure, by default, the JsonResult class now responds only to HTTP POST requests. JsonResult 개체를 반환 하는 작업 메서드에 대 한 Ajax GET 호출은 POST를 대신 사용 하도록 변경 해야 합니다.Ajax GET calls to action methods that return a JsonResult object should be changed to use POST instead. 필요한 경우 JsonResult의 새 JsonRequestBehavior 속성을 설정 하 여이 동작을 재정의할 수 있습니다.If necessary, you can override this behavior by setting the new JsonRequestBehavior property of JsonResult. 잠재적 악용에 대 한 자세한 내용은 블로그 게시물 Phil Haack의 블로그 게시물을 참조 하세요.For more information about the potential exploit, see the blog post JSON Hijacking on Phil Haack's blog.

ModelBindingContext의 모델 및 ModelType 속성 setter는 사용 되지 않습니다.Model and ModelType property setters on ModelBindingContext are obsolete

ModelBindingContext 클래스에 설정 가능한 새 ModelMetadata 속성이 추가 되었습니다.A new settable ModelMetadata property has been added to the ModelBindingContext class. 새 속성은 모델과 ModelType 속성을 모두 캡슐화 합니다.The new property encapsulates both the Model and the ModelType properties. Model 및 ModelType 속성은 더 이상 사용 되지 않지만 이전 버전과의 호환성을 위해 속성 getter가 여전히 작동 합니다. ModelMetadata 속성에 위임 하 여 값을 검색 합니다.Although the Model and ModelType properties are obsolete, for backward compatibility the property getters still work; they delegate to the ModelMetadata property to retrieve the value.

DefaultControllerFactory 클래스에 대 한 변경 내용에서 파생 된 사용자 지정 컨트롤러 팩터리가 중단 됩니다.Changes to the DefaultControllerFactory class break custom controller factories that derive from it

RequestContext 속성을 제거 하 여 DefaultControllerFactory 클래스를 수정 했습니다.The DefaultControllerFactory class was fixed by removing the RequestContext property. 이 속성 대신 요청 컨텍스트 인스턴스가 보호 된 가상 GetControllerInstance 및 Getcontrollerinstance 메서드에 전달 됩니다.In place of this property, the request context instance is passed to the protected virtual GetControllerInstance and GetControllerType methods. 이 변경 내용은 DefaultControllerFactory에서 파생 된 사용자 지정 컨트롤러 팩터리에 영향을 줍니다.This change affects custom controller factories that derive from DefaultControllerFactory.

사용자 지정 컨트롤러 팩터리는 ASP.NET MVC 응용 프로그램에 대 한 종속성 주입을 제공 하는 데 주로 사용 됩니다.Custom controller factories are often used to provide dependency injection for ASP.NET MVC applications. ASP.NET MVC 2를 지원 하도록 사용자 지정 컨트롤러 팩터리를 업데이트 하려면 새 서명과 일치 하도록 메서드 시그니처 또는 시그니처를 변경 하 고 속성 대신 요청 컨텍스트 매개 변수를 사용 합니다.To update the custom controller factories to support ASP.NET MVC 2, change the method signature or signatures to match the new signatures, and use the request context parameter instead of the property.

이제 "Area"는 예약 된 경로 값 키입니다."Area" is a now a reserved route-value key

이제 경로 값의 "영역" 문자열은 "controller" 및 "action"과 동일한 방식으로 ASP.NET MVC에서 특별 한 의미를 갖습니다.The string "area" in Route values now has special meaning in ASP.NET MVC, in the same way that "controller" and "action" do. 한 가지 의미는 HTML 도우미가 "영역"을 포함 하는 경로 값 사전과 함께 제공 되는 경우 도우미는 더 이상 쿼리 문자열에 "영역"을 추가 하지 않습니다.One implication is that if HTML helpers are supplied with a route-value dictionary containing "area", the helpers will no longer append "area" in the query string.

영역 기능을 사용 하는 경우 경로 URL의 일부로 {area}를 사용 하지 않도록 해야 합니다.If you are using the Areas feature, make sure to not use {area} as part of your route URL.

내용을Disclaimer

본 문서는 예비 문서이며, 여기에 설명한 소프트웨어의 최종 상업적 출시 전에 크게 변경될 수 있습니다.This is a preliminary document and may be changed substantially prior to final commercial release of the software described herein.

이 문서에 포함된 정보는 게시 날짜 당시 논의된 문제에 대한 Microsoft Corporation의 현재 관점을 나타냅니다.The information contained in this document represents the current view of Microsoft Corporation on the issues discussed as of the date of publication. Microsoft는 변화하는 시장 상황에 대응해야 하므로 Microsoft의 약속으로 해석되지 않아야 하며, Microsoft는 게시 날짜 이후 제시된 정보의 정확성을 보증하지 않습니다.Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information presented after the date of publication.

이 백서는 정보 제공만을 목적으로 합니다.This White Paper is for informational purposes only. Microsoft는 이 문서에 있는 정보에 대한 명시적 또는 묵시적, 법적인 보증을 하지 않습니다.MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS DOCUMENT.

해당 저작권법을 준수하는 것은 사용자의 책임입니다.Complying with all applicable copyright laws is the responsibility of the user. 저작권에서의 권리와는 별도로 이 설명서의 어떠한 부분도 Microsoft의 명시적인 서면 승인 없이는 어떠한 형식이나 수단(전기적, 기계적, 복사기에 의한 복사, 디스크 복사 또는 다른 방법) 또는 목적으로도 복제되거나 검색 시스템에 저장 또는 도입되거나 전송될 수 없습니다.Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.

Microsoft는 이 설명서 본안에 관련된 특허권, 상표권, 저작권, 또는 기타 지적 재산권 등을 보유할 수도 있습니다.Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. 서면 사용권 계약에 따라 Microsoft로부터 귀하에게 명시적으로 제공된 권리 이외에, 이 설명서의 제공은 귀하에게 이러한 특허권, 상표권, 저작권 또는 기타 지적 재산권 등에 대한 어떠한 사용권도 허용하지 않습니다.Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.

별도로 언급 하지 않는 한, 용례에 사용 된 회사, 조직, 제품, 도메인 이름, 전자 메일 주소, 로고, 사람, 장소 및 이벤트는 실제 데이터가 아닙니다. 어떠한 실제 회사, 조직, 제품, 도메인 이름, 전자 메일 주소, 로고, 사람, 장소 또는 이벤트와도 연관 시킬 의도가 없으며 그렇게 유추 해서도 안 됩니다.Unless otherwise noted, the example companies, organizations, products, domain names, email addresses, logos, people, places and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, email address, logo, person, place or event is intended or should be inferred.

© 2010 Microsoft Corporation.© 2010 Microsoft Corporation. All rights reserved.All rights reserved.

Microsoft 및 Windows는 미국 및/또는 기타 국가에서 Microsoft Corporation의 상표이거나 등록된 상표입니다.Microsoft and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.

여기에 언급된 실제 회사와 제품의 이름은 각각 해당 소유자의 상표일 수 있습니다.The names of actual companies and products mentioned herein may be the trademarks of their respective owners.