当前位置: 首页 > 面试题库 >

ASP.NET MVC和SQL查询

许博达
2023-03-14
问题内容

我使用Web表单开发网站,现在我有一个项目,其中我将MVC3
Framework与Rzor一起使用。我的问题是关于MVC中的一些基本设计模式。我有一个网页,在左侧,我将从SQL表中提取类别,在中心,我将查询另一个Sql表,以及整个页面中的其他几个表。

所以我的问题是…什么是将数据带入一个网页的最佳方法,所有这些查询都是完全独立的,是否需要为每个查询创建新的MODEL?还是有更好的方法呢?

在WebForms中,我使用了用户控件,其中每个用户控件都有自己的设计和Sql查询。我听说过在MVC中使用部分视图,但是我不确定,我想我很难理解如何使用不同的查询将数据带入一个网页并在网页上显示输出。

谢谢


问题答案:

您应该创建一个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制作和使用的。



 类似资料:
  • 正在尝试使用asp。net和mvc。 我有一个像这样的< code>Weather类: 我用来发出< code>GET请求的方法如下所示: 我请求的 URI 返回 JSON 对象。 我想访问< code >“Weather”对象,提取属性< code>main和< code>description,并在我的< code>GetWeather中返回一个列表,其中< code>JSON对象的天气属性与

  • 您好,我有一个按钮,当我单击它时,此函数称为: 这里是CreateQrLink函数 这是我想通过点击下载QrCode按钮从这个视图下载图像的视图,我如何实现它?我不在数据库中保存QrLink我应该保存它还是其他什么?我想从src=Model获取照片。QrUrl

  • 如何将这个复杂的sql语句更改为JPQL? 这是否可以在JPQL表单中显示?

  • 问题内容: 在where语句中,添加不必要的括号是否 会影响SQL性能? 例子: 问题答案: 不,没有任何重要意义。 该查询被解析一次,在此阶段,一些额外的括号可能意味着执行时间略有不同,但是您必须要有很多括号才能进行测量。 一旦查询被解析并开始执行,它的行为将与没有多余括号的行为完全相同。仅保留实际操作。

  • 我正在尝试使用sqlalchemy执行原始sql查询,并想知道什么是“正确”的方法。 我的查询如下(目前): 我不喜欢的是字符串格式和缺乏任何参数处理(你好music_volume引号:-D)。 我试图遵循这个答案: 如何在SQLAlchemy flask应用程序中执行原始SQL 应用我读到的内容后,我的代码片段如下所示: 然而,我得到的错误,mv和ml是不能识别的参数。 如果我把我的代码片段改成

  • 问题内容: 我有以下几点: 如果@VariableEqualToZero为null,它将替换为1。如果@VariableEqualToZero = 0,也需要它替换为1。我该怎么做呢? 问题答案: