を作成する必要がありますViewModel
。以下の更新を見てください
これはあなたのページを表すモデルです。ビューに表示する要素は、ViewModelに存在する必要があります。コントローラにViewModelを入力し、ページに表示します。
ショッピングサイトのページの例を作成しました。左側にカテゴリがあり、中央に商品があります。両方のエンティティは異なるテーブルに存在します。
例:
class MainPageViewModel
{
//this data is from a different table.
//and goes on the left of the page
public string Categories {get; set;}
//this data is also from a different table.
//and goes on the center of the page
public List<Products> Products {get; set;}
}
コントローラ内:
public class HomeController : Controller
{
// GET: /Home/
public ActionResult Index()
{
MainPageViewModel vm = new MainPageViewModel();
vm.Categories = GetCategories();
//use the GetProducts() to get your products and add them.
vm.Products.Add(...);
return View(vm); //pass it into the page
}
string[] GetCategories()
{
DataTable data = GetDataFromQuery("SELECT * FROM Categories WHERE..");
//convert the data into a string[] and return it..
}
//maybe it has to return something else instead of string[]?
string[] GetProducts()
{
DataTable data = GetDataFromQuery("SELECT * FROM Products WHERE..");
//convert the data into a string[] and return it..
}
DataTable GetDataFromQuery(string query)
{
SqlDataAdapter adap =
new SqlDataAdapter(query, "<your connection string>");
DataTable data = new DataTable();
adap.Fill(data);
return data;
}
}
次に、ビューに適切に表示します。
@model MainPageViewModel
@{ ViewBag.Title = "MainPage"; }
<div id="left-bar">
<ul>
@foreach (var category in Model.Categories)
{
<li>@category</li>
}
</ul>
</div>
<div id="center-content">
<ul>
@foreach (var product in Model.Products)
{
<li>@product.Name</li>
<li>@product.Price..</li>
.....
}
</ul>
</div>
アップデート
これは、データベースのテーブルと列が定期的に変更されると述べたコメントに関するものです。
はっきりとは言えませんが、毎日そのようなテーブルを作成するべきではないかもしれません。より良いデータベース設計があるかもしれません。あるいは、RDBMSが適切ではないので、NoSqlを調べる必要があります。データベース(MongoDBなど)
それでも、上記のコードを続行する場合は、これを独自のデータレイヤークラスに入れることをお勧めします。
また、Dapperも見てください。これは、SQLクエリまたはストアドプロシージャを使用してデータベースからオブジェクトを取得するだけの非常に薄いデータアクセス層です。(まさにあなたが必要とするもの)それはstackoverflowによって作られそして使われます。