asp.net的MVC和SQL查询(asp.net mvc and sql queries)

2019-09-22 01:47发布

我开发的网站使用网络的形式,现在我已经在那里我使用MVC3框架与Rzor项目。 我的问题是关于MVC的一些基本的设计模式。 我有一个网页,其中在左边,我会从SQL表拉分类,在我中心将查询另一个SQL表,和几个各地的页面。

所以我的问题是...什么将数据引入一个网页的最佳方式,所有这些查询都是完全独立的,做我需要为每个查询创建新模式? 或有这样做的更好的办法?

在的WebForms我使用的用户控件,其中每一个用户的控制有其自身的设计和SQL查询。 我听说过的MVC使用部分的意见,但我不知道,我想我有很难理解如何使用不同的查询,将数据引入一个网页与网页上的显示输出。

谢谢

Answer 1:

您应该创建一个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的 )

不过,如果你继续与上面的代码,我建议把这个变成一个数据层阶级自身。

也看看小巧玲珑的它是刚刚得到的对象从SQL查询或存储过程的数据库非常薄的数据访问层。 (只要您需要的东西),它是由和计算器使用。



文章来源: asp.net mvc and sql queries