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 이라니. 말이 안되죠. 그래서, 모델 바인더는 모델 스테이트에 에러를 추가합니다. 저희가 유효성 검사를 하지 않은 필드도 검사를 하는거죠.











문제

하이퍼V가상에서, VHDX를 복사해서 SID정보까지는 변경하였지만, 사이트를 열었을 때 

계속해서 503에러가 뜨면서, 해당 어플리케이션 풀이 죽는 현상 발생

이벤트로그 : 어플리케이션 풀 config 중에서 가상디렉터리 도메인 계정정보 중에서 passwd 컬럼을 디코드 할 수 없다는 메시지

pool config can not decode iis


참고 URL : https://blogs.msdn.microsoft.com/vijaysk/2009/03/13/caution-while-xcopying-iis-7-0-config-files/





해결방법은 아래와 같다.


윈도우 서버 IIS 에 있는 N개의 웹사이트 및 설정 및 어플리케이션 풀 설정까지 한번에 복사하기


복사할 서버에서 아래의 경로에 있는 파일을 복사합니다.

경로 : C:\Windows\System32\inetsrv\config

파일 : administration.config, applicationHost.config, redirection.config


복사할 서버에서 커맨드창을 열어 아래의 커맨드를 사용하여 2개의 XML 설정파일을 생성합니다.

aspnet_regiis -px "iisConfigurationKey" "C:\iisConfigurationKey.xml" -pri

aspnet_regiis -px "iisWasKey" "C:\iisWasKey.xml" -pri


닷넷 경로 C:\Windows\Microsoft.NET\Framework64\v4.0.30319)


위의 5개의 파일을 복사하여 새로운 서버에 복사합니다.

administration.config, applicationHost.config, redirection.config 파일은 C:\Windows\System32\inetsrv\config 로

iisConfigurationKey.xml, iisWasKey.xml 파일은 C드라이브(적당한 곳)에 복사합니다. 


저장한 다음 커맨드 창을 열어 아래의 커맨드를 사용하여 설정파일을 복원합니다.  끝

aspnet_regiis -pi "iisConfigurationKey" "C:\iisConfigurationKey.xml"

aspnet_regiis -pi "iisWasKey" "C:\iisWasKey.xml"


인터넷정보서비스를 켜보면 그대로 옮겨짐. 웹사이트 열어도 잘 됨.







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

[MVC] Model State, Validation도우미  (0) 2016.03.14
MVC 강의 정리  (0) 2016.03.13
HTTP Error 503. The service is unavailable.  (0) 2016.02.12
DOM 문서객체모델  (0) 2016.02.11
웹 기반 기술  (0) 2016.02.11

+ Recent posts