【问题标题】:Using SqlQuery in ASP.NET MVC在 ASP.NET MVC 中使用 SqlQuery
【发布时间】:2018-09-14 16:03:26
【问题描述】:

我的控制器中有一个查询,它从数据库中获取两列,并将其存储在一个变量中以将其返回给视图。我正在使用表格显示数据。以下是代码:

控制器:

public ActionResult DisplayData(LabourTimeModel ltm)
    {

        LabourTimeEntities db = new LabourTimeEntities();
        string query = "Select ProcessItemName, sum(DATEDIFF(MINUTE, LaborTimeOut,LaborTimeIn)) AS 'TimeSpent' FROM LaborTime group by ProcessItemName";

        var data = db.Database.SqlQuery<LabourTimeModel>(query).ToList();

        return View(data);
    }

查看:

@model List<LabourTime.Models.LabourTimeModel>

@{
    ViewBag.Title = "Labour Time - Home";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

    <h2><centre>Display Data</h2><hr />

            <table>
                  <tr>
                     <th colspan="2">Time Spent For Process Item</th>
                  </tr>
                 <tr>
                   <th style="padding:0 15px 0 15px;"> Process Item Name </th>
                      <th style="padding:0 15px 0 15px;"> Time Spent </th>
                   </tr>
                @foreach (LabourTime.Models.LabourTimeModel obj in Model)
                    {
                  <tr>
                   <td style="padding:0 15px 0 15px;">@obj.processItemName.ToString()</td>
                   <td style="padding:0 15px 0 15px;">@obj.TimeSpent</td>
                    </tr>
                    }
           </table>

这给了我想要的输出。但是,我想再写一个查询并将其传递给同一个视图并再显示一个这样的表。我如何实现这一目标?任何帮助表示赞赏,谢谢!

我现在得到的输出:

Column1     Column2
   A          20
   B          10
   C          45

我希望在此下方再显示一个表格。

我尝试过的控制器:

    public ActionResult DisplayData(LabourTimeModel ltm)
    {

        LabourTimeEntities db = new LabourTimeEntities();
        string query = "Select ProcessItemName, sum(DATEDIFF(MINUTE, LaborTimeOut,LaborTimeIn)) AS 'TimeSpent' FROM LaborTime group by ProcessItemName";

string query1 = "ONE MORE QUERY"

        var data = db.Database.SqlQuery<LabourTimeModel>(query).ToList();
        var data1 = db.Database.SqlQuery<LabourTimeModel>(query1).ToList();

        return View(data);
    }

但是,我不能使用返回视图传递两个结果。我被困在这里了。

【问题讨论】:

标签: c# sql asp.net-mvc


【解决方案1】:

您需要创建视图模型(具有两个列表的类)并将该对象传递给视图。

var model = new MyModel {
   Data1 = your first query,
   Data2 = your second query
}

return View(model);

在视图中:

@model MyModel 

【讨论】:

  • @Liam 我不知道我有问题!但是是的......这是我的行为:)
  • @Romias 您好,感谢您的回复。如果将查询传递给 Data1 和 Data2,如何执行查询?对不起,我没听懂。
【解决方案2】:

您也可以使用匿名类型来发送回您的视图

   public ActionResult DisplayData(LabourTimeModel ltm)
{

    LabourTimeEntities db = new LabourTimeEntities();
    string query = "Select ProcessItemName, sum(DATEDIFF(MINUTE, LaborTimeOut,LaborTimeIn)) AS 'TimeSpent' FROM LaborTime group by ProcessItemName";

    string query1 = "ONE MORE QUERY"

    var data = db.Database.SqlQuery<LabourTimeModel>(query).ToList();
    var data1 = db.Database.SqlQuery<LabourTimeModel>(query1).ToList();

    dynamic viewModel = new ExpandoObject();
    viewModel.Query1= data;
    viewModel.Query2=data1;
    return View(viewModel);
}

在你看来,像这样使用它

@Model.Query1.ColumnName

【讨论】:

  • 您在视图中声明的模型是什么?以前从未尝试过这种方法...
  • 只需使用键名,就像使用 @Html.TextBox("Query1") 之类的模型属性。对于列表类型,您可以以与声明模型相同的方式声明它,然后将其转换为适当的类型
  • @ArunKumar 感谢您的回复。它是这样工作的吗?我得到这些查询的多个列。如何在视图上实现它?
  • 稍微更新了我的答案以使用动态视图模型 Expnado 对象。如果您不想使用它,则需要覆盖视图页面默认行为以设置模型属性以支持匿名类型。
猜你喜欢
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多