簡體   English   中英

ASP.Net MVC:在 controller 中的 LINQ 查詢結果的視圖中構建 gridview

[英]ASP.Net MVC: Building a gridview in the view from the result of a LINQ query in the controller

我已經看到許多聲稱可以解決此問題的示例,但沒有一個說明 controller 和視圖位於 2 個不同的位置。 這對我自己來說是令人困惑的,我懷疑其他一些 ASP 新手。

注意:我不是來自網絡表單。 我從未使用過網絡表單,也不打算使用。 請仔細閱讀問題。

索引.cshtml

@model IEnumerable<CovidAppV5.ViewModel.COVIDvm>

@{
    ViewBag.Title = "Index";
}
<meta name="viewport" content="width=device-width" />

<h2>Report</h2>

<asp:GridView ID="GridView1" AutoGenerateColumns="true" runat="server">
</asp:GridView>

報告控制器.cs

public ActionResult Index(string Name, string Phone1)
        {
            //System.Diagnostics.Debug.WriteLine(Phone1);

            List<COVIDvm> VMlist = new List<COVIDvm>(); // to hold list of forms

            var covidQuery = (from form in db.Case_Log
                              where form.Name == Name
                              join eForm in db.Emergency_Leave on form.Name equals eForm.Name
                              select new {form.Name, form.Phone1, eForm.OrgNumber, eForm.UnableToTelework, eForm.CaringForMinor}).ToList();
           
            GridView.DataSource = covidQuery; //covidQuery is already a list

            GridView.Databind();

            foreach (var item in covidQuery)
            {
                COVIDvm objcvm = new COVIDvm(); // ViewModel
                objcvm.Name = item.Name;
                objcvm.Phone1 = item.Phone1;
                objcvm.OrgNumber = item.OrgNumber;
                objcvm.UnableToTelework = item.UnableToTelework;
                objcvm.CaringForMinor = item.CaringForMinor;
                VMlist.Add(objcvm);
            }
            return View(VMlist);
        }

在 controller 你可以忽略 VMList 的東西; 那是為了顯示一個現在可以工作的表格,但我不想在 gridview 工作后使用。

我的問題是 controller 中的這些行不起作用:

 GridView.DataSource = covidQuery; //covidQuery is already a list
 GridView.Databind();

導致 GridView 出現此錯誤:

在此處輸入圖像描述

和數據源的這個錯誤:

在此處輸入圖像描述

但我不確定如何讓 covidQuery 進入視圖以執行此操作。 我可以像這樣傳遞 covidQuery:

  return View(covidQuery);

但是,我如何在視圖中訪問它?

如果有其他方法可以做到這一點,那一定要告訴我。

我想使用 gridview 的原因是因為根據查詢的結果,某些列不是必需的,因此網格需要生成可變數量的列。

我認為您來自 asp.net 網絡表單開發人員。

在 asp.net mvc 中,您不能將 gridview 用作網絡表單,在 MVC 中,您需要使用 Table tr td 格式並在您的情況下通過 @Model 中的每個項目創建循環。

喜歡

<table>
<thead>
<th>Name </th>
<th>Phone1</th>
</thead>
<tbody>
@foreach(var itm in Model)
{
<tr>
<td>@itm.Name</td>
<td>@itm.Phone1</td>
</tr>
}
<tbody>
</table>

而且 MVC 也不是緊密耦合的,您需要使用 javascript 或任何其他客戶端腳本語言與 controller 進行通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM