2017-05-08 13 views
0

標準のSQLクエリを実行するMVCコントローラメソッドList<DataRow> GetUserCriteria()がありますが、EFまたはオートマッペではありません。クエリを実行した後にそれはありません:リストのクエリ結果をビューモデルに変換するにはどうすればよいですか?

DataTable dt = new DataTable(); 
SqlDataAdapter sdp = new SqlDataAdapter(objCommand) 
conn.Open(); 
sdp.Fill(dt) 
list = dt.AsEnumerable().ToList(); 

return list; 

質問は、私はビューに消費し、使用するビューモデルのための右のタイプにそのリストを変換することができますどのように、関連するビューを返す私のActionResultMethodにありますか?

public ActionResult ClientProfile() { 

    var rawData = GetUserCriteria(); 
    //Convert to type for view model here and pass into the view below. 

return View() 
} 

答えて

1

あなたは変換を回避し、それを簡単にすることができます

public class aDataTableView 
{ 
    public DataTable aTable { get; set; } 
} 

public class HomeController : Controller 
{ 
    //use any action or code that goes here 
    public ActionResult Index63() 
    { 
     DataTable dt = new DataTable(); 
     SqlConnection conn = new SqlConnection(@"data source=.\sqlexpress;initial catalog=Breaz;integrated security=True"); 
     //conn.Open(); 
     SqlCommand objCommand = new SqlCommand("Select * from dbo.Example", conn); 
     SqlDataAdapter sdp = new SqlDataAdapter(objCommand); 
     sdp.Fill(dt); 

     //you are not explicitely disposing of dt 
     //dt.Dispose(); 

     aDataTableView dtw = new aDataTableView { aTable = dt }; 

     objCommand.Dispose(); 
     sdp.Dispose(); 
     conn.Close(); 
     conn.Dispose(); 

     return View(dtw); 
    } 

@model Testy20161006.Controllers.aDataTableView 

@{ 
     Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index63</title> 

</head> 
<body> 
    @using (Html.BeginForm()) 
     { 
     <table border="1"> 
      <thead> 
       <tr> 
        @foreach (System.Data.DataColumn col in Model.aTable.Columns) { 
       <th>@col.Caption</th> 
      } 
       </tr> 
      </thead> 
      <tbody> 
       @foreach(System.Data.DataRow row in Model.aTable.Rows) { 
       <tr> 
        @foreach (var cell in row.ItemArray) { 
        <td>@cell.ToString() </td> 
        } 
       </tr> 
       } 
      </tbody> 
     </table> 
     <input type="submit" value="click" /> 
     } 
</body> 
</html> 
+0

信用できるhttp://stackoverflow.com/questions/2243898/displaying-standard-datatables-in-mvc – kblau

+0

これをフォームでレンダリングする例はありますか?ビューに渡すデータは、HtmlHelpersでレンダリングされたユーザーのプロファイルデータです – LifeOf0sAnd1s

0

上記の答えはデータ部分のために働いていました。私はちょうど私がやっているものの場合には、私は私のコントローラで次の手順を実行して、それを達成できたことを追加します。

public ActionResult Index63() { 
DataTable dt = new DataTable(); 
     SqlConnection conn = new SqlConnection(@"data source=.\sqlexpress;initial catalog=Breaz;integrated security=True"); 
     //conn.Open(); 
     SqlCommand objCommand = new SqlCommand("Select * from dbo.Example", conn); 
     SqlDataAdapter sdp = new SqlDataAdapter(objCommand); 
     sdp.Fill(dt); 

     aDataTableView dtw = new aDataTableView { aTable = dt }; 

     //Cast Each Row Element to an object 
     object FirstNameField = dt.Row[0][3] 

     //Map user values to model backing view 
     Index63ViewModel userViewModel = new Index63ViewModel(); 

     userViewModel.FirstName = FirstNameField.ToString(); 

return(userViewModel) 
} 

このアプローチは、あるビューに単一のユーザー・プロファイル・データを渡すために働きます私がこの場合に必要だったもの。また、上記のリンクにもクレジットが与えられます。ありがとうございました!

関連する問題