У меня есть запрос в моем контроллере, который извлекает два столбца из базы данных, и я сохраняю его в переменной, чтобы вернуть его в представление. Я показываю данные с помощью таблицы. Ниже приведен код для этого:
Контроллер:
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);
}
Но я не могу передать два результата, используя представление возврата. Я застрял здесь.
@Liam Спасибо!





Вам необходимо создать модель представления (класс с двумя списками) и передать этот объект представлению.
var model = new MyModel {
Data1 = your first query,
Data2 = your second query
}
return View(model);
В представлении:
@model MyModel
Вам кажется страдают от FGIW
@Liam Я не знал, что у меня проблема! Но да ... это мое поведение :)
@Romias Привет, спасибо за ответ. Как мне выполнить запрос, если я передаю запрос Data1 и Data2? Простите, но я не понял.
Вы также можете использовать анонимные типы, чтобы отправить обратно в ваше представление
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
А что вы декларируете в View как модель? Никогда раньше не пробовал этот подход ...
Просто используйте имена ключей при использовании свойств модели, таких как @ Html.TextBox ("Query1"). В случае типов списков вы можете объявить его так же, как вы объявляете свою модель, а затем привести ее к соответствующему типу.
@ArunKumar Спасибо за ответ. Это так работает? Я получаю несколько столбцов для этих запросов. Как мне реализовать это в представлении?
немного обновил свой ответ, чтобы использовать объект Expnado, который является моделью динамического представления. Если вы не хотите использовать это, вам необходимо переопределить поведение страницы просмотра по умолчанию, чтобы установить свойства модели для поддержки анонимных типов.
Вы хотите Посмотреть модель