* 컨트롤러에서 뷰로 정보를 전달하는 방법

컨트롤러 클래스 : URL 요청에 대한 응답과정을 호출 -> 전달된 브라우저 요청을 처리 -> DB에서 데이터를 가져온다 -> 어떤 형식의 응답을 브라우저에 전송할 것인지를 결정하는 코드들이 작성되는 위치! -> 후에, 브라우저로 전달될 HTML 응답을 생성하고 형식화하기 위해 컨트롤러에 템프릿을 사용

뷰템플릿은 업무 로직을 수해아거나, 직접 연결해서는 안된다! 모든 데이터는 컨트롤러에서부터 받아서 작업을 수행! => 이로써 유지보수가 용이한 코드를 유지할 있다.

 

  1. 모델추가하기
  2. Modes 폴더 > 우클릭 Add > New Item > Code > Class 선택 > Work.cs
    1. 만들어진 해당 클래스에 데이터베이스에서 정보를 가지고 올 수 있도록 선언한다.
      1. public class Work
      2. {
      3. // 데이터베이스의 정보를 나타내기 위한 ,
      4. // 각각의 work 개체 인스턴스는 db 테이블의 'Row' 해당하고,
      5. // Work 클래스의 속성들을 테이블의 'column' 맵핑된다.
      6. public int SEQ {get; set;}
      7. public string TYPES_ { get; set; }
      8. public string VERSIONS { get; set; }
      9. public string SUMMARY { get; set; }
      10. public string DETAILS { get; set; }
      11. public string Title { get; set; }
      12. public DateTime INITDAES { get; set; }
      13. public DateTime FINDATES { get; set; }
      14. public DateTime ReleaseDate { get; set; }
      15. public decimal YN { get; set; }
      16. }//Work

         

    2. 동일한 파일에 데이터베이스를 연결할 Context를 만든다.

 

  1. public class WorkDBContext : DbContext
  2. {
  3. // db에서 work 클래스의 인스턴스를 가져오고, 저장하고, 갱신하는 작업을 처리
  4. // Entity FrameWork로부터 제공되는 dbContext 기본클래스를 상속받는다.
  5. public DbSet<Work> Works { get; set; }
  6. }//WorkDBContext

 

  1. 연결 문자열 생성 및 SQL 서버 LocaDB 작업하기
    프로젝트의 Web.config 에서 다음과 같이 연결한다.

     

    1. <add name="WorkDBContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-MvcMovies-20131008092844;Integrated Security=SSPI"
    2. providerName="System.Data.SqlClient" />

  

반응형

 

ASP.NET MVC 전달된 URL 기준으로 선택된 컨트롤러 클래스를 (그리고, 클래스에 존재하는 선택된 메서드를) 호출합니다. ASP.NET MVC 사용하는 기본 URL 라우팅 로직은, 실행할 컨트롤러와 메서드를 결정하기 위해서 다음과 같은 형태의 URL 사용합니다

   

View

Razor 엔진

 ASP.NET MVC 3에서 처음 도입된 Razor 엔진 사용해서 작성해 것입니다. Razor 기반의 템플릿은 .cshtml 이라는 파일 확장자를 갖고 있으며, C# 이용한 우아한 HTML 출력 생성 방식을 제공해줍니다. Razor 이용하면 템플릿 작성을 위해 필요한 글자수와 키입력을 최소화할 있으며, 빠르고 자연스러운 코딩이 가능해집니다

   

   

  1. _Layout.cshtml : 웹페이지에서 공통으로 사용되는 페이지 ( cf. 마스터 페이지)

상단의 로고 위치라던지, page 메뉴들을 공통으로 지정할 있다.

   

  1. Index.cshtml
반응형

 

  1. 새로운 프로젝트 만들기
    1. 프로젝트 > ASP.NET MVC 2 응용 프로그램 > 프로젝트 생성
  2. DB연결
    1. APPDATA > 우클릭 > 추가 > SQL Server 데이터베이스 > 이름 : (DB이름).mdf > 추가
  3. MODEL 만들기 위해서 model 폴더에서 우클릭 > LINQ to SQL 생성 (workClass.dbml)
    1. 서버탐색기 > 테이블 > VIEW 보여질 테이블을 선택해서 화면에 드래그앤 드롭 > 저장

       

 

 

*workClass.designer.cs 자동으로 db관련하여 생성된다.

 

 

  1. 모델 작업 .
반응형

   

어플리케이션의 구조를 Model(모델), View(), Controller(컨트롤러) 분리하는 패턴

 - Model(모델) : 실제 로직을 구현하는 부분. 일반적으로 데이터베이스로부터 데이터를 가져와서 담아두거나, 데이터 베이스로 저장하는 역할

- View () : 사용자 인터페이스, , UI부분. 화면 출력과 관계된 로직을 포함할 수는 있지만, 사용자 입력이나 인터랙션, 업무와 관계된 로직은 View 가져서는 안된다. 오로지 화면출력!

- Controller (컨트롤러) : mvc에서 가장 핵심이 되는 패턴. 사용자의 인터렉션을 처리하고, 모델을 조작하며, 최종 UI 출력할 있는 뷰를 담당한다.

 

   

이를 사용하는 이유,

  1. 요소 간에 연결을 보다 느슨하게 구성할 수가 있게 되어, 복잡한 애플리케이션을 관리하기에 용이하다.
  2. 병행 개발(동시에 각각의 컴포넌트를 개발하는 방식) 가능하다.
  3. 이러한 분리로 인하여, 기존의 ASP.NET 애플리케이션보다 훨씬 테스트하기가 용이하다.
    1. 기존의 ASP.NET 테스트 하기 위해서는 사용자 입력에 따라 반드시 서버가 요구된다는 제약이 있었지만, MVC 패턴을 적용하면 개별적인 컴포넌트를 독립적으로 테스트 있게 된다. ?? (? 뭔소릴가.)

         

 

  1. View - ViewResult 액션 결과 반환
  2. Redirect - RedirectResult 액션 결과 반환
  3. RedirectToAction - RedirectToRouteResult 액션 결과 반환
  4. RedirectToRoute - RedirectToRouteResult 액션 결과 반환
  5. Json - JsonResult 액션 결과 반환
  6. JavaScriptResult - JavaScriptResult 액션 결과 반환
  7. Content - ContentResult 액션 결과 반환
  8. File - 메서드와 함께 전달된 파라미터에 따라 FileContentResult, FilePathResult, FileStreamResult 액션 결과 반환

     

   

액션 결과는 ActionResult 클래스를 상속한다. 대부분의 경우 ViewResult 반환한다.

 

기반의 애플리케이션의 장점

· 각각의 페이지 단위로 기능을 작성하는 Page Controller 패턴을 사용한다
:
개별 화면 단위 중심적인 업무를 개발하기에 매우 적합하다.

· 이벤트 중심의 프로그래밍 모델을 제공한다
:
다양한 이벤트를 제공하는 많은 서버 컨트롤이 제공되기에, 이벤트 중심적인 개발을 통해 업무 화면을 직관적으로 작성할 있다.

· 뷰상태(ViewState) 서버 기반의 폼을 사용하기에, 상태 정보를 관리하기에 용이하다.

 

MVC 기반의 애플리케이션의 장점

· 모든 요청을 단일 컨트롤러를 통해서 처리하는 Front Controller 패턴을 사용한다 
:
모든 요청을 단일 컨트롤러를 통해 처리하므로, 라우팅(routing) 하부구조를 지원하는 애플리케이션을 개발할 있다.

· 애플리케이션을 3개의 논리 모듈로 분리하기에 애플리케이션의 복잡성을 관리하기 쉽게 한다.

· 뷰상태나 서버 기반의 폼을 사용하지 않는다 
:
개발자가 애플리케이션의 동작방식을 전체적으로 제어할 있으므로 세밀하게 애플리케이션을 조작하고 싶은 이들에게 적합하다. , 이러한 기능(상태정보 관리) 필요할 경우 추가적인 작업이 요구된다.

   

출처 : TAEYO.NET ASP.NET 강좌 기반의 개발과 MVC 기반의 개발 http://www.taeyo.net/Columns/View.aspx?SEQ=214&PSEQ=35&IDX=0

 

반응형

'Backend > .NET Framework' 카테고리의 다른 글

ASP.NET MVC 만들면서 배우기- 배우자(1) - view  (59) 2013.10.07
MVC 시작하기(1)  (60) 2013.10.07
Substring  (61) 2013.08.29
C# 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.  (57) 2013.08.09
c# split  (59) 2013.07.15

 

Substring

파라미터:

beginIndex - 개시 인덱스 ( 값을 포함한다)

endIndex - 종료 인덱스 ( 값을 포함하지 않는다)

 

 

0

1

2

3

4

5

6

7

1

2

3

4

5

6

7

8

        

a

b

c

d

e

f

g

H

 

1. substring : 어디서부터 어디까지 잘라내겠다는 뜻.(java의 substring과 같다)

Substring 메서드 : 문자열의 일부만 추출

형식 : 문자열변수명 . Substring( 추출위치 )

-> 위치는 0 부터 시작하며 , (0,3) 0문자열부터 3번째 문자열까지 4개의 문자열을 추출한다는 뜻입니다.

* 이때 공백도 문자열에 포함됩니다.

 

string str = "매우 힘든 C# 은 열심히 하면 재밌어요";

Console.WriteLine(str);

// 5번째 문자부터 8 문자 추출

Console.WriteLine(str.Substring(4,8));

// 5번째 이후 문자 모두를 추출

Console.WriteLine(str.Substring(4));

라고 인터넷에서 이야기 하고 있다.

그런데 javascript 에서는

 

if(inputPHONE2.length == 8){

sPN1 = inputPHONE2.substring(0,4);

sPN2 = inputPHONE2.substring(4,8);

}

else

{

sPN1 = inputPHONE2.substring(0, 3);

sPN2 = inputPHONE2.substring(3, 7);

}

 

이렇게 해도 잘만 나눠진다. 8글자에서 4 4개씩 추출하려고 했으니.

그러나 c#에서는 인덱스 에러가 ..... 그건 당연하다. 왜냐하면 7번째뿐이 없는데 8번쨰까지 하라고 했으니.

그래서 한번 substring 해주고 나면 다음번에는 자를 범위부터 끝까지.. 해줘야 한다.

Javascript 예외를 인정해 주는건가?

반응형

'Backend > .NET Framework' 카테고리의 다른 글

MVC 시작하기(1)  (60) 2013.10.07
ASP.NET MVC 시작하기  (60) 2013.10.07
C# 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.  (57) 2013.08.09
c# split  (59) 2013.07.15
c# 형변환  (56) 2013.07.15

 

Exception Type: System.NullReferenceException

Exception: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

 

 

이유는?

 

1.  뷰에 선언하지 않고 .cs에서 바로 사용하는 경우. 즉 designer.cs 에 등록이 되지 않고 .cs단에서 사용한 경우.

( 아마 이 경우에는 빌드 시에 오류메세지가 나올 것이다. )

 

2.

반응형

'Backend > .NET Framework' 카테고리의 다른 글

ASP.NET MVC 시작하기  (60) 2013.10.07
Substring  (61) 2013.08.29
c# split  (59) 2013.07.15
c# 형변환  (56) 2013.07.15
/\s/g  (0) 2013.05.10

string[] splititDate = initDate.Split(new char[] { '-', ' ' }, StringSplitOptions.RemoveEmptyEntries);

 

java에서 split은 편했는데...

string[] arrStr =  $%^.split("문자열"); 

이런식으로 해서 접근하면 배열에 자를 기준으로 하여

저장되어 편리했었는데

 

c#은 뭘 많이 써줘야 하네..

chart[]로 되어 있어서 이런 옵션을 넣어줘야 하는듯.

왜 같은 자바스크립트인데.. 왜그러지?... 또 내가 삽질하고 있는 건가...


이렇게 안해도 

Split.('자를문자열');로 해주면 된다. 

역시... 하나더 알아둔거지뭐~~

반응형

'Backend > .NET Framework' 카테고리의 다른 글

Substring  (61) 2013.08.29
C# 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.  (57) 2013.08.09
c# 형변환  (56) 2013.07.15
/\s/g  (0) 2013.05.10
c# 구조체 GetType().BaseType  (0) 2013.04.25

int _days = Convert.ToInt32(splitfinDate[2]) - Convert.ToInt32(splititDate[2]);

 string days = Convert.ToString(_days) + "일 작업";

반응형

'Backend > .NET Framework' 카테고리의 다른 글

Substring  (61) 2013.08.29
C# 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.  (57) 2013.08.09
c# split  (59) 2013.07.15
/\s/g  (0) 2013.05.10
c# 구조체 GetType().BaseType  (0) 2013.04.25

 if (Form.txtUserID.value.replace(/\s/g, "") == "") {

\s : 공백
g : 전체검색 (global)

txtUserID.replace(/\s/g, ""); 

=> 문자열 txtUserID에 있는 모든 공백을 없앤다.

반응형

'Backend > .NET Framework' 카테고리의 다른 글

Substring  (61) 2013.08.29
C# 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.  (57) 2013.08.09
c# split  (59) 2013.07.15
c# 형변환  (56) 2013.07.15
c# 구조체 GetType().BaseType  (0) 2013.04.25

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace ex_refcalss

{

    class CPoint

    {

        private int x, y;


        public CPoint(int _x, int _y)

        {

            x = _x;

            y = _y;

        }



        public void print()

        {

            Console.WriteLine("base:{0}", GetType().BaseType);

            //base : System.Object 로 출력

            Console.WriteLine("class:{0},{1}", x, y);

        }

    }


    struct SPoint

    {

        public int x, y;

        public SPoint(int _x, int _y)

        {

            x = _x;

            y = _y;

        }

        

        //public SPoint(){} // 구조체는 기본 생성자를 만들 수 없음.(예약됨)

        public void Print()

        {

            Console.Write("base:{0},  ", GetType().BaseType);

            //base : System.ValueType.f 로 출력

            Console.WriteLine("struct:({0},{1})", x, y);

        }

    }



    class Program

    {

        static void Main(string[] args)

        {

            CPoint cpt = new CPoint(1, 1);

            cpt.print();

            


            SPoint spt;

            spt.x = spt.y = 7;

            spt.Print();


            SPoint spt1 = spt;

            spt1.Print();

            


        }

    }

}


반응형

'Backend > .NET Framework' 카테고리의 다른 글

Substring  (61) 2013.08.29
C# 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.  (57) 2013.08.09
c# split  (59) 2013.07.15
c# 형변환  (56) 2013.07.15
/\s/g  (0) 2013.05.10

<c:forEach items="${sdatas}" var="staff" varStatus="sdatas">


sdatas에 담겨진

index를 알고싶으면?  ${sdatas.index}

count를 알고싶으면? ${sdatas.count}

반응형

System.out.println("StaffList:"+jsonObject.names()+"::"+jsonObject.values());

반응형

swt Browser url 찾기


swt browser에서 url을 타면서 이동할 때 URL를 알아내는 방법





반응형

HTTP Status 500 -

The server encountered an internal error () that prevented it from fulfilling this request. 

The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application



------------------------------------------------------------------------------------------------------------------


이런 에러가 난다면??


1. JavaBeans를 잘 사용했는지 확인! (인터넷에서 열심히 찾아보자!)

2. 기존에 잘 됐었는데 갑자기 안되었다면????

  -> 톰캣을 너무많이 실행해서 톰켓안에서 꼬인것이다.ㅜㅜ.(test를 너무 많이 해서.)


그렇다면,, 이렇게 해보자!




반응형
String url = request.getRequestURL().toString();

  String[] str = url.split("/",7);

    String geturl = str[6];

  

   int page_size = 7;

   int group_size = 3;

   int totalCount;

   int pageCount;

   int curPage;

   

   if(reqPage==null){

   curPage=1;

   }else{

   curPage= Integer.parseInt(reqPage);

   }

  

 

반응형

+ Recent posts