.NET MVC2018.07.11 11:44

        public ActionResult GetInventoryExcel(GetInventoryListModel getInventoryListModel)


            // Validation

            if (getInventoryListModel.SearchStartDate == DateTime.MinValue) { getInventoryListModel.SearchStartDate = DateTime.Now.AddYears(-50); }

            if (getInventoryListModel.SearchEndDate == DateTime.MinValue) { getInventoryListModel.SearchEndDate = DateTime.Now; }

            getInventoryListModel.CustomerNo = LoginService.GetLoginInfo.cust_no;

            getInventoryListModel.PlaceCode = LoginService.GetLoginInfo.pl_cd;

            if ("inventoryNo".Equals(getInventoryListModel.searchOption)) { getInventoryListModel.InventoryCode = getInventoryListModel.searchOptionDetail; }

            if ("inventoryName".Equals(getInventoryListModel.searchOption)) { getInventoryListModel.InventoryName = getInventoryListModel.searchOptionDetail; }


            Response.Buffer = true;

            Response.ContentType = "application/vnd.ms-excel";

            Response.AddHeader("content-disposition", "attachment; filename=Inventory"+DateTime.Now.ToShortDateString()+".xls");

            Response.ContentEncoding = System.Text.Encoding.UTF8;

            Response.Charset = "UTF-8";



            System.IO.StringWriter sw = new System.IO.StringWriter();

            System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);


            Response.Write(@"<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /><style> TD { mso-number-format:\@; } </style>");





            return new EmptyResult();


public GridView GetGridViewForExcel(DataTable dt)


            var inventoryDT = new System.Data.DataTable("Inventory");

            inventoryDT.Columns.Add("Inventory No ", typeof(string));

            inventoryDT.Columns.Add("Inventory Name", typeof(string));

            inventoryDT.Columns.Add("Inventory Total Qty", typeof(int));

            inventoryDT.Columns.Add("Registration Date", typeof(System.DateTime));

            if (dt != null)


                for (int i = 0; i < dt.Rows.Count; i++)


                    inventoryDT.Rows.Add(dt.Rows[i]["inv_code"], dt.Rows[i]["inv_name"], dt.Rows[i]["inv_qty"], dt.Rows[i]["reg_dt"]);



            var gridView = new System.Web.UI.WebControls.GridView { AllowPaging = false, DataSource = inventoryDT };


            return gridView;


Posted by James jangjeonghun
.NET MVC2018.06.21 17:30




public List<T> ConvertToList<T>(DataTable dt)


            dt = dt ?? new DataTable();

            var columnNames = dt.Columns.Cast<DataColumn>()

                    .Select(c => c.ColumnName)


            var properties = typeof(T).GetProperties();

            return dt.AsEnumerable().Select(row =>


                var objT = System.Activator.CreateInstance<T>();

                foreach (var pro in properties)


                    if (columnNames.Contains(pro.Name))

                        pro.SetValue(objT, row[pro.Name]);


                return objT;



Posted by James jangjeonghun
.NET MVC2018.06.07 14:55

string[] arrivalSkuNo

if (arrivalSkuNo.Count(n => n == skuNo) > 1)


ModelState.AddModelError("", ""); break;


Posted by James jangjeonghun
.NET MVC2018.06.01 11:37


public class ProductsController : ApiController


        Product[] products = new Product[]


            new Product { Category = "category1",  Id = 1, Name = "name1", Price = 1 }

            , new Product { Category = "category2", Id = 2, Name = "name2", Price = 2 }


        public IEnumerable<Product> GetAllProducts()


            return products;


        public IHttpActionResult GetProduct(int id)


            var product = products.FirstOrDefault((p) => p.Id == id);

            if (product == null)


                return NotFound();


            return Ok(product);




<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">


  <title>Product App</title>




    <h2>All Products</h2>

    <ul id="products" />



    <h2>Search by ID</h2>

    <input type="text" id="prodId" size="5" />

    <input type="button" value="Search" onclick="find();" />

    <p id="product" />


  <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>


    var uri = 'api/products';

    $(document).ready(function () {

      // Send an AJAX request


          .done(function (data) {

            // On success, 'data' contains a list of products.

            $.each(data, function (key, item) {

              // Add a list item for the product.

              $('<li>', { text: formatItem(item) }).appendTo($('#products'));




    function formatItem(item) {

      return item.Name + ': $' + item.Price;


    function find() {

      var id = $('#prodId').val();

      $.getJSON(uri + '/' + id)

          .done(function (data) {



          .fail(function (jqXHR, textStatus, err) {

            $('#product').text('Error: ' + err);






Posted by James jangjeonghun
.NET MVC2018.05.18 10:13


Posted by James jangjeonghun
.NET MVC2018.05.17 13:59

다국어 지원 웹사이트 만들기

1. 리소스 파일을 만들다. (Global.resx, Global.ko.resx)

* Custom Tool Namespace를 "Language"로 설정

* Access Modifier는 "public"으로 설정

* Name은 동일하고 Value는 각 언어에 맞게 작성할것!!!

2. Global.asax 파일 소스 추가

protected void Application_AcquireRequestState(object sender, EventArgs e)


            string culture = "en-US";

            if (Request.UserLanguages != null)


                culture = Request.UserLanguages[0];



            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture);

            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);


3. .cshtml 소스 추가


    다국어 서비스(@Request.UserLanguages[0])

    <form action="/Home/Index" method="post" name="selectLanguageForm">

        <select name="selectLanguage" onchange="javascript:document.selectLanguageForm.submit()">

            <option value="en-us">언어변경</option>

            <option value="en-us">English</option>

            <option value="ko">Korea</option>




<div>기본 언어 : @Language.Global.language</div>

비고] .cs 


        public ActionResult Index(string selectLanguage)


            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(selectLanguage);

            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(selectLanguage);

            return View();


테스트 방법

브라우저의 언어를 변경한 후 페이지에 접속하여 테스트한다.

참조 사이트 https://docs.microsoft.com/ko-kr/aspnet/core/fundamentals/localization?view=aspnetcore-2.0

* 언어를 누른 다음, 위로 이동을 누릅니다.

Posted by James jangjeonghun
.NET MVC2018.05.16 10:30

Class 방식

using System.Web.Mvc;

namespace WebApplication.Helpers


    public static class HelperClass


        public static string ExtensionMethod(this HtmlHelper helper)


            return "call ExtensionMethod";




@using WebApplication.Helpers


참조(web.config 파일에 네임스페이스 등록시 @using WebApplication.Helpers 선언 없이 사용가능 )

  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.Web.Mvc.Html" />
      <add namespace="System.Web.Routing" />
      <add namespace="WebApplication.Helpers" />

Inline 방식

@helper ExtensionMethodInineType(string message)




@ExtensionMethodInineType("call ExtensionMethodInineType")

App_Code 방식

App_Code 폴더 추가

@HelpersFromAppCode.AppCodeHelper("call App_Code helper")

Posted by James jangjeonghun
.NET MVC2018.05.15 10:18


In layout pages, renders the portion of a content page that is not within a named section.

사용법 : @RenderBody()


Renders the content of one page within another page.(Overrides WebPageRenderingBase.RenderPage(String, Object[]).)

사용법 : @RenderPage("~/Views/Home/RenderPage.cshtml", null)


In layout pages, renders the content of a named section.

사용법 : @RenderSection("scripts", required: false)

@section scripts



        alert("RenderSection Test....");



Posted by James jangjeonghun
.NET error2018.05.05 20:05

ASP.NET Entity Data Model을 사용하여 엔티티 객체를 생성한 후 "모델에서 데이터베이스 생성" 혹은 "데이터베이스에서 모델 업데이트" 기능을 사용하는대 이때 꼭 알아두어야 할 상항들을 정리해 보았다.!!!

1. "모델에서 데이터베이스 생성" 기능을 이용할 경우 자동으로 DDL이 생성이 되는대 이때 기존에 존재하던 데이터를모두 삭제한다. 왜나햐면 자동으로 생성된 DDL 명령문에는 "DROP TABLE" 명령어가 포함되어 있기 때문이다.

2. 기존에 존재하던 entity(엔티티)객체를 삭제하고 "모델에서 데이터베이스 생성" 기능을 이용할 경우 자동으로 DDL이 생성이 되는대 이때 기존에 존재하던 테이블(entity와 매핑되어 있던 테이블)이 삭제되지 않고 그대로 데이터베스에 존재한다.

3. 외래 참조키(FK)의 주키 테이블 정보를 수정,삭제하기 위해서는 외래 참조키(FK)를 사용한 모든 테이블에 외래 참조키(FK)를 해제해 주어야한다. ex) ALTER TABLE [dbo].[Word] DROP CONSTRAINT [FK_Word_Type] 그렇치 않을 경우 다음 메세지가 출력된다. ex) Could not drop object 'dbo.Type' because it is referenced by a FOREIGN KEY constraint. 그런대 문제는 "모델에서 데이터베이스 생성" 기능을 이용할 경우 자동으로 DDL이 생성이 되는대 이때 DDL명령어에 삭제한 entity(엔티티)객체와 매핑이 되는 데이터베이스 테이블 정보가 누락된다. 정리해서 말하면 기존에 존해하던 entity객체에 외래 참조키(FK)가 설정이 되어 있고 이 entity객체를 삭제할 경우 DDL명령에 외래 참키(FK)해제 명령어가 누락이된다는 것이다. 그래서 외래 참조키(FK)의 주키 테이블 정보를 수정,삭제할 수 없다.

4. entity(엔티티)객체와 테이블 매핑이 모호함, 함상 "모델에서 데이터베이스 생성" 기능을 이용해야만 entity(엔티티)객체와 테이블 정보가 매핑이된다.

sp. ASP.NET Entity Data Model에 대한 개인적인 의견을 몇자 적자면 가급적 "모델에서 데이터베이스 생성" 기능 보다는 "데이터베이스에서 모델 업데이트" 기능을 이용하기를 권장한다. 엔티티 프레임워크(entity framework)를 이용하여 엔티티를 생성한 후 "모델에서 데이터베이스 생성"기능 이용할 경우 위에서 언급한 것 이외의 많은 문제들이 있을것 같다. 사실 ASP.NET Entity의 가장 불편하것은 내가 작성한 entity framework의 엔티티들과 실 데이터베이스간의 동기화 문제이다. entity framework에서 작성한 엔티티 객체들이 실시간으로 실 데이터베이스와 동기화가 되는것이 아니기에 뭔가 모를 많은 부자연스러움이 있다. 어쩌면 이는 기술적인 하계일 수도 있다. 그리고 또한 entity framework는 개발자에 한해서 이용할 수 있는 기능이기에 다른 분야의 사람과(DB admin)과 협업이 부자연스럽다.

맞치 DB와 관련된 모든 업무를 개발자에게 떠넘기는 듯한 느낌이 든다. 이는 MS에서 뭔가 착각하고 있는건 아닌가 싶다. 사실 DB업무는 DB admin과 개발자가 협업을 통하여 업무를 진행하는 것인대 entity framework는 순전히 개발자에게 의존하는 경향이 있다.

Posted by James jangjeonghun
.NET error2018.05.03 11:26

에러 메세지 :

지정한 인수가 유효한 값 범위를 벗어났습니다.

매개 변수 이름 : site

해결 방법 : 

제어판 > 프로그램 > Windows 기능 켜기/끄기 > 인터넷 정보 서비스 > world wide web 서비스 설치

*필요한 경우 컴퓨터를 다시시작...

에러 원인 :

인터넷 정보 서비스와 관련된 응용프로그램이 설치되어 있지 않아 웹응용프로그램을 실행 할 수 없었던것 같다. 

Posted by James jangjeonghun

티스토리 툴바