'레이저(Razor)'같은 뷰엔진에서 몇몇 속성은 이미 만들어져 있는 메서드를 가지고 출력이 가능합니다. 대표적인 메서드가 '@Html.DisplayNameFor'나 ''@Html.ValidationMessageFor같은 것들입니다. 문제는 정된 메서드만으로는 모든 속성을 표시할 수 없다는 점입니다. 1. 문제의 시작 다음과 같이 모델을 선언합시다. /// /// 단어 /// [DisplayName("단어")] [Required(ErrorMessage = "단어를 적어 주세요.")] [Display(Description = "문제로 쓰일 단어 입니다.")] public string Word { get; set; } 위 코드를 뷰로 보내서 바인딩한다면 '@Html.DisplayNameFor'를 사용하면 '..
마이크로 소프트나 다른 회사에서 만든 컴포넌트들을 쓰다 보면 흔히 격는 일 중에 하나가 제공되지 않는 기능이 필요할 때입니다. 보통은 해당 클래스를 상속받는 클래스를 만들거나 별도의 클래스를 만든 후 그 클래스 안에 기존 클래스를 생성하고 새로 만든 클래스에 기능을 추가 하는 방법도 있습니다. 그런데 일관성을 높이려면 A클래스에 속한 기능을 B클래스를 선언해서 사용하는 건 그리 좋은 방법이 아닙니다. 기존에 A클래스를 참조하고 있는 모든 기능을 B클래스로 옮겨야 하기 때문이죠. (안 그러면 어떤 건 A를 참조하고 어떤 건 B를 참조하는 불상사를 많이 보게 됩니다-_-;) 이럴 때 사용하는 것이 확장 메서드(Extension Methods) 입니다. 이름 그대로 남이 만들어 놓은 객체에 내가 원하는 기능을..
제가 html과 css를 어느정도 다루기 때문에 UI관련된 프론트엔드툴을 쓸생각이 없었는데 모바일도 동일 페이지를 재공한다는 가정하에 레이아웃을 잡게 되면 이야기가 달라 집니다;;; 손봐야할 것들이 너무 많기 때문이죠;;; 그래서 유명한 웹 프론트엔드 도구인 부트스트랩(bootstrap)을 사용하기로 결정했습니다. 저 같이 디자이너를 따로 두지 않았는데 디자인 센스도 꽝이 개발자에게 이런 툴들을 여러가지면으로 좋습니다 ㅎㅎㅎ 0. 시작하기 전에... 재미있게도 누겟(NuGet)에는 이미 부트스트랩의 최신버전이 올라와 있습니다. 그런데 다운받아서 부스트랩 샘플을 돌려보니 레이아웃이 깨집니다-_-;;; 소스를 확인해보니 누겟으로 받은 부트스트랩파일에는 빠진파일이 몇게 있습니다 -_-a 그래서 결국 그냥 부트..
'ASP.NET MVC'를 공부하면서 느끼는 게 많은데..... 그런 건 집어치우고;; 'ASP.NET MVC'의 자습서나 기본 생성 템플릿은 이전과 많이 다른 인증 방식을 보여 주고 있습니다. 마이크로소프트가 어련히 잘해놨겠지만 찝찝한 것들도 많고;;; 어찌됐건 기존 쓰던 세션 방식을 사용하면서도 편리한 필터를 사용하기 위해서는 인증용 필터를 따로 만들어야 합니다. (기본 생성된 인증은..... 참고 자료일 뿐 완전히 고쳐야 합니다;;) 1. 필터 만들기 인증용 필터는 훈스닷넷에 풍술사님의 코드를 참고하여 만들었습니다. (참고 : [5조] Filter - AuthorizeAttribute) public enum UserType { Admin = 1, Staff = 2, User = 3, } public..
html5로 작성된 코드를 보다가 table 코드에서 ""를 보았습니다. 1.테이블(table)에 추가된 th th가 무엇인가 해서 찾아보니 테이블에서 헤더 역활을 하는 td의 경우 th로 작성하고 합니다. (참고 : W3C HTML5 - th element) 일반적으로 테이블은 데이터를 나열하는 용도로 사용합니다. 그렇기 때문에 헤더는 거의 매번 필요하죠. 하지만 이전까지는 헤더를 구분하기위해서 따로 스타일을 적용해야 했습니다. 스타일 시트에서 th를 작성하면 따로 스타일을 적용할 필요가 없습니다. 2.이전 방식과 비교 이전에는 헤더로 사용할 td나 tr에 직접 스타일을 지정했습니다. 이렇게 하면 table와 tr에 스타일을 지정해주어야 한다는 단점이 잇습니다. 하지만 th를 이용하면 이렇게 테이블 테..
데이터베이스는 버전 관리가 쉽지 않다는 문제가 있습니다. (물론 몇 가지 방법을 쓰면 불가능한 건 아닌데 일반적인 프로젝트 관리에 비하면....-_-;) 그래서 테스트DB와 실제DB와 차이가 크게 날 경우 저장 프로시저 같은 것들은 싹 날리고 생성하는 게 편합니다. 그 외에도 여러 가지 용도로 테이블이나 함수, 뷰 같은 것을 한 번에 지우기도 합니다. 1. 명령어 생성 저번 글에서 저장 프로시저나 테이블 같은 구성요소를 검색하는 방법을 알아봤습니다. (참고 : [MSSQL] MSSQL의 여러 구성요소 검색하기 - 'sys.objects') 검색 결과를 보면 이름이 출력되죠, 그러니 앞뒤로 쿼리를 붙여주면 우리가 원하는 동작을 하는 쿼리를 만들 수 있습니다. 예를 들면 테이블의 경우 'Drop Table'..
쿼리를 짜다 보면 셀랙트된 결과 테이블을 이용하여 저장 프로시저를 호출한다거나 각 데이터(Row)에 따른 다른 처리가 필요할 때가 있습니다. 예를 들면 '사원1'의 영업실적을 상위 상관들에게 누적하기 위한 저장 프로시저가 있다면 영업사원 숫자만큼 저장 프로시저를 호출해야 하죠. 이런 행단위 처리를 할 때 사용하는 것이 '커서(cursor)'입니다. (참고 : 커서(SQL Server Compact Edition)) 1. 커서의 이해 MSDN을 보면 눈이 돌아갈 정도입니다-_-;; 지금 당장 우리에게 필요한 건 단순히 "검색된 결과 테이블의 행만큼 저장 프로시저를 호출하고 싶다." 입니다. 커서는 이름처럼 데이터 자체를 조작하는 역활이 아닌 데이터의 위치를 알려주는 역활입니다. 그렇기 때문에 다음 칸의 데..
자주 있는 일은 아니지만 가끔 저장프로시저나 테이블 같은 것들을 쿼리로 파악해야 하는 경우가 있습니다. 보고서를 만든다거나 문서같은 것을 만들때 말이죠, 이때 사용하는 것이 'sys.objects'입니다. (참고 : MSDN - sys.objects(Transact-SQL)) 1. 'sys.objects' 사용하기 'sys.objects'를 테이블 처럼 이용하여 쿼리를 사용할 수 있습니다. Select name From sys.objects Where type = 'U' 이런 식으로 말이죠. 2. 'type' 종류 위에 코드에서 보시면 아시겠지만 이 코드에서 중요한건 'type'입니다, 이미 MSDN을 보셨다면 알고 계시겠죠? ㅎㅎㅎ 개체 유형: AF 집계 합수 (CLR) C CHECK 제약 조건 D D..
경고 1 '[Control Name]' 요소는 알 수 없는 요소입니다. 이 문제는 웹 사이트에 컴파일 오류가 있거나 web.config 파일이 없는 경우 발생할 수 있습니다. 이 에러는 보통 웹 컨트롤을 만들었는데 링크가 잘못되었을 때 흔히 보게 됩니다. 1. 증상 그런데 기존에 있던 프로젝트를 수작업으로 다른 비주얼 스튜디오 버전으로 옮기고 있는데 이런 에러가 발생했습니다. 당연히 잘 돌던 코드인지라 전혀 원인을 못 찾고 있었는데.... 아.... 아...... 2. 원인 웹 사용자 컨트롤을 사용할 때 주의 사항이 있습니다. 웹 사용자 컨트롤을 참조하기 전에 웹 사용자 컨트롤이 컴파일돼있어야 합니다. 무슨 말이냐 하면 웹 사용자 컨트롤이 컴파일되기 전에 사용하면 서로 컴파일이 안된 내용을 참조하려고 하..
단축 주소를 구현하기 위해서 'MapPageRoute'를 사용합니다. (참고 - [Asp.net] 단축 주소 구현하기) 'RouteTable.Routes.MapPageRoute'를 이용하다 보면 종종 '404 에러'를 볼수 있습니다. 'MapPageRoute'를 이용할때 '404 에러'는 보통 라우팅을 잘못해서 엉뚱한 페이지로 가는 경우입니다. 그런데 로컬에서 잘 동작하고 테스트서버에서 잘돌아가서 본서버에 적용했더니 본서버에서는 '404 에러'가 났습니다. -_-;;;; 1. 해결 방법 이것저것 해봤는데 결국 먹힌건 이것 뿐입니다-_-; 웹 컨피그(Web.config)파일에 밑에 다은 코드를 추가 합니다. 1-1.찝찝함 검색을 하다보면 '' 이 옵션을 쓰지 않는 것이 좋다는 말이 종종 보입니다... 이유..