MVC의 ActionResult


 MVC에서 보내질 View의 형태를 결정하는 것

ActionResult 를 상속받는 구현 객체들에 대한 이야기

ActionResult 의 원형

public abstract class ActionResult {

public abstract void ExecuteResult(ControllerContext context);

}

단지 ExecuteResult를 호출하는 아주 간단한 추상 클래스

컨트롤러 컨텍스트를 전달 받는데 , 이는 모든 http 서버측 객체에 접근할수 있다는 것을 의미하며 , 또한 해당 컨트롤러를 참조할수 있다는 것을 의미한다.


1. System.Web.Mvc.ContentResult

ASP.NET 의 Response.Write와 같은 기능을 한다. Content(); 에 전달되는 인자를 그대로 출력한다.


2. System.Web.Mvc.EmptyResult

메서드명과 같이 아무것도 반환하지 않는다.


3. System.Web.Mvc.FileResult

Stream 형태로 해당 뷰를 반환한다.


4. System.Web.Mvc.HttpUnauthorizedResult

권한이 없는 http 오류코드(401) 를 리턴한다


5. System.Web.Mvc.HttpStatusCodeResult

각종 http 상태코드를 반환한다


6.System.Web.Mvc.JavaScriptResult

자바스크립트 형태의 Stream 을 리턴한다.


7.System.Web.Mvc.JsonResult

Json 형태의 Stream을 리턴한다 ContextType 은 (text/json)이다.


8.System.Web.Mvc.RedirectResult

해당 페이지로 리다이렉트 한다 ASP.NET Classic 의 Response.Redirect 


9. System.Web.Mvc.RedirectToRouteResult

해당 MVC안의 라우팅 되는 페이지로 리다이렉트 한다.


10. System.Web.Mvc.ViewResultBase

해당 뷰를 렌더링.

 때에 따라 View로 Model 을 보내거나 , View로 사용할 페이지를 지정할수 있다.





'기술(MS,Web,Windows,AWS) > Web개발' 카테고리의 다른 글

interface 인터페이스 정리  (0) 2016.03.27
MVC 내부 파이프라인  (0) 2016.03.16
MVC 강의 정리 2일차  (0) 2016.03.14
[MVC] Model State, Validation도우미  (0) 2016.03.14
MVC 강의 정리  (0) 2016.03.13

1. Model State
모델 스테이트(Model State)= 모델 스테이트 딕셔너리

유효성 에러 표시 용도

혹은 이렇게 체크

if(ModelState.IsValid)

{

Employee employee =new

UpdateModel(employee);



EmployeeBusinessLayer employeeBusinessLayer

mployeeBusinessLayer.AddEmployee(employee);


return RedirectToAction("Index");

}

유효성 검사중에 이 프로퍼티들에서 fail이 나면 model state dictionary(컨트롤러 클래스의 ModelState를 의미하는)에 추가가됩니다.

model state에 에러가 있으면 ModelState.IsVaild 는 false를 반환합니다. 이같은 경우, 전화번호를 추가하는 HTML 페이지는 다시 그려지게됩니다. 그렇지 않으면, 즉, 에러가 없을 경우는 디비에 저장이 됩니다.

2. Validation 도우미 2개

1) Html.ValidationSummary() 도우미 

HTML폼 위에서 바로 호출이 됩니다. 그리고선 불릿(bulleted) 리스트로 에러 메시지를 보여줍니다.

2) Html.ValidationMessage() 도우미

각각의 HTML 폼 필드 옆에 호출이 됩니다. 에러를 해당 필드 바로 옆에 표시해주는거죠. 에러가 난 부분에도 같은 에러메시지가 표시되는 것을 확인할수 있습니다.


이 두 메쏘드는 ASP.NET MVC 스카폴딩에 의해 자동적으로 Create와 Edit 뷰에서 사용이됩니다.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Validation1.Models.TelDir>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Create</h2>
    <%= Html.ValidationSummary() %>
    <% using (Html.BeginForm()) {%>
        <fieldset>
            <legend>Fields</legend> 
            <div class="editor-label">
                <%= Html.LabelFor(model => model.Name) %>
            </div>
            <div class="editor-field">
                <%= Html.TextBoxFor(model => model.Name) %>
                <%= Html.ValidationMessageFor(model => model.Name) %>
            </div>
            
            <div class="editor-label">
                <%= Html.LabelFor(model => model.Phone) %>
            </div>
            <div class="editor-field">
                <%= Html.TextBoxFor(model => model.Phone) %>
                <%= Html.ValidationMessageFor(model => model.Phone) %>
            </div>
            
            <div class="editor-label">
                <%= Html.LabelFor(model => model.SpeedDial) %>
            </div>
            <div class="editor-field">
                <%= Html.TextBoxFor(model => model.SpeedDial) %>
                <%= Html.ValidationMessageFor(model => model.SpeedDial) %>
            </div>
            
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    <% } %>
    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>
</asp:Content>


다음은 유효하지 않은 값을 summit 했을때의 화면입니다.


3. PreBinding / PostBinding


1) HTML 폼 필드들이 클래스에 바운드 되기 전에 에러를 주는 PreBinding 에러

2) HTML 폼 필드들이 바운드 된 후에 에러를 주는 PostBinding 에러

Create()  액션은 다음과 같이 TelDir 클래스의 인스턴스를 받도록 되어있습니다.

public ActionResult Create([Bind(Exclude="Id")] TelDir dir)

summit을 하게되면 모델 바인더에 의해 HTML 폼 필드들의 값이 dir 로 바운드됩니다. 폼 필드값을 바운드 하지 못하면 자동적으로 디폴트 모델 바인더에 에러 메시지를 추가합니다.

예를들어, 디폴트 모델 바인더는 TelDir 클래스의 SpeedDial 속성에 'speed' 문자를 바운드 할 수 없습니다. decimal 타입에 string 이라니. 말이 안되죠. 그래서, 모델 바인더는 모델 스테이트에 에러를 추가합니다. 저희가 유효성 검사를 하지 않은 필드도 검사를 하는거죠.









+ Recent posts