2012-03-15 2 views
2

보기에 ADO.NET 데이터 집합을 통과하지만, 거기 방법 수백나는 우리가 천천히 MVC로 이동하는 기존 프로젝트를

내가의 데이터 세트를 유지하고자하는 객체 모델을 선택하고보기에 액세스하십시오. 가능한가, 아니면 더 좋은 방법이 있을까요? 너무 많은 데이터가 있기 때문에 목록을 만드는 것이 어렵습니다. 우리는 결국 엔티티로 SQL을 변환 할 것이지만 지금은 그렇지 않습니다.

예 :

모델 :

string query = "SELECT * FROM dbo.manf"; 
SqlDataAdapter adapter = new SqlDataAdapter(query, conn); 
DataSet data = new DataSet(); 
adapter.Fill(data, "manf"); 

보기 : 당신은 너무 컨트롤러 코드는 다음과 같이한다, 당신의보기로 원하는 개체를 전달할 수

@foreach (DataRow data in manf.Tables["manf"].Rows) 
{ 
    @:manf["id"] + " " + manf["name"]); 
} 
+4

당신이 어떤 도메인 객체가 있습니까? DataTable을 컨트롤러의 도메인 개체로 변환 한 다음 뷰에 전달합니다. –

+0

가장 좋은 방법은 아니지만 이전 응용 프로그램을 마이그레이션 중이므로 마치 모델 엔터티 인 것처럼 데이터 세트를보기로 전달하면됩니다. 그러면 모델이 데이터 집합이됩니다. – Romias

+0

개체에 Get 및 Sets 사용? 흠. 나는 200 개의 컬럼을 가진 쿼리를 가지고있다. 나는 그것이 손으로 쓰는 데 시간이 많이 걸릴 것이라고 생각합니다. 다른게 있니? – tdjfdjdj

답변

2

:

public ViewResult Index() 
{ 
    .... 
    return View(data); 
} 

그리고 귀하의보기 :

@model System.Data.DataSet 

@foreach (DataRow row in Model.Tables["manf"].Rows)  
{  
    @(row["id"] + " " + row["name"]) 
} 

전달 된 개체는보기의 일반 기본 클래스의 Model 속성에 저장되며 Model을 사용하여 액세스 할 수 있습니다. @model은 전달 된 객체의 데이터 유형을 정의합니다.

어쨌든 모든 코드는 HTML로 인코딩되며, :는 필요하지 않습니다. 인코딩하지 않으려면 @ Html.Raw (...)를 사용해야합니다.

편집 : 하나의 매개 변수 만 모델로 이동할 수 있습니다. 둘 이상의 객체를 사용하려면 두 속성 모두를 포함하는 새로운 데이터 유형 (ViewModel)을 정의해야합니다. 창 제목과 같은 간단한 개체의 경우 ViewBag를 사용할 수 있습니다.

ViewBag는 컨트롤러의 동적 속성이며 기본적으로 ViewData의 래퍼입니다.

+0

완벽 뷰()에 두 개 이상의 매개 변수를 사용할 수 있습니까? 보기를 선택하는 case 문을 사용하고 있으므로 view ("pagename", data)? – tdjfdjdj

+0

데이터를 데이터 세트로 전달하는 것 같습니다. 내가 누락 된 것이 있습니까? – tdjfdjdj

+0

오류 메시지가 있습니까? 보기 ("페이지 이름", 데이터)를 사용할 수 없습니다. 둘 이상의 매개 변수 : 내 대답에 더 많은 정보를 추가했습니다. ViewBag 또는 두 속성을 모두 포함하는 새 dataType을 사용하는 것이 가능합니다. – slfan

1

컨트롤러 코드

 //pQ is your query you have created 
    //P4DAL is the key name for connection string 

     DataSet ds = pQ.Execute(System.Configuration.ConfigurationManager.ConnectionStrings["Platform4"].ConnectionString); 


     //ds will be used below 
     //create your own view model according to what you want in your view 
    //VMData is my view model 

    var _buildList = new List<VMData>(); 
       { 
        foreach (DataRow _row in ds.Tables[0].Rows) 
        { 
         _buildList.Add(new VMData 
         { 
     //chose what you want from the dataset results and assign it your view model fields 

          clientID = Convert.ToInt16(_row[1]), 
          ClientName = _row[3].ToString(), 
          clientPhone = _row[4].ToString(), 
          bcName = _row[8].ToString(), 
          cityName = _row[5].ToString(), 
          provName = _row[6].ToString(), 
         }); 



        } 

       } 

     //you will use this in your view 
     ViewData["MyData"] = _buildList; 

보기

@if (ViewData["MyData"] != null) 
    { 

     var data = (List<VMData>)ViewData["MyData"]; 
     <div class="table-responsive"> 
      <table class="display table" id="Results"> 

       <thead> 
        <tr> 
         <td>Name</td> 
         <td>Telephone</td> 
         <td>Category </td> 
         <td>City </td> 
         <td>Province </td> 

        </tr> 
       </thead> 

       <tbody> 
        @foreach (var item in data) 
        { 
       <tr> 
        <td>@Html.ActionLink(item.ClientName, "_Display", new { id = item.clientID }, new { target = "_blank" })</td> 
        <td>@item.clientPhone</td> 
        <td>@item.bcName</td> 
        <td>@item.cityName</td> 
        <td>@item.provName</td> 

       </tr> 

       } 
       </tbody> 


      </table> 
      </div> 
      } 
관련 문제