2012-03-15 11 views
2

にADO.NET DataSetを渡す方法モデルを作成し、ビューにアクセスします。これは可能ですか、これを行うにはより良い方法がありますか?あまりにも多くのデータがあるためリストを作成するのは難しいです。私たちは最終的にSQLをエンティティに変換しますが、今は変換しません。私たちはゆっくりとMVCに移動しているレガシープロジェクトを持っていますが、ADO.NET SQL DataSetが、私は、データ・セットを維持したいと思います</p> <p>オブジェクトの何百もあるビュー

例:

モデル:

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は渡されたオブジェクトのデータ型を定義します。

いずれのコードも、とにかくHTMLエンコードされますが、:は必要ありません。エンコードしたくない場合は、@ Html.Raw(...)を使用する必要があります。

EDIT:1つのパラメータはモデルとしてのみ移動できます。複数のオブジェクトを使用する場合は、両方のプロパティを含む新しいデータ型(ViewModel)を定義する必要があります。ウィンドウタイトルのような単純なオブジェクトの場合は、ViewBagを使用できます。

ViewBagはコントローラの動的プロパティであり、基本的にViewDataのラッパーです。

+0

が完璧です。ビュー()に2つ以上のパラメータを使用できますか?私はビューを選択するcase文を使用しているので、view( "pagename"、data)が必要です。 – tdjfdjdj

+0

私はデータセットとしてデータを渡すようです。私には何かがありませんか? – tdjfdjdj

+0

エラーメッセージはありますか? view( "pagename"、data)は使用できません。複数のパラメータについて:私は私の答えにもっと多くの情報を追加しました。それは、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> 
      } 
関連する問題