【问题标题】:ASP.Net MVC: Building a gridview in the view from the result of a LINQ query in the controllerASP.Net MVC:根据控制器中的 LINQ 查询结果在视图中构建网格视图
【发布时间】:2021-05-19 17:12:34
【问题描述】:

我见过许多声称可以解决此问题的示例,但没有一个示例说明控制器和视图位于 2 个不同的位置。这让我自己感到困惑,我怀疑其他一些 ASP 新手。

注意:我不是来自网络表单。我从未使用过网络表单,也不打算使用。请仔细阅读问题。

Index.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>

ReportController.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);
        }

在控制器中你可以忽略 VMList 的东西;那是为了显示一个现在可以工作的表格,但我不想在 gridview 工作后使用。

我的问题是控制器中的这些行不起作用:

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

导致 GridView 出现此错误:

DataSource 的这个错误:

但我不知道如何让 covidQuery 进入视图以执行此操作。我可以像这样传递 covidQuery:

  return View(covidQuery);

但是我如何在视图中访问它呢?

如果有其他更好的方法,请告诉我。

我想使用 gridview 的原因是因为根据查询的结果,某些列不是必需的,因此网格需要生成可变数量的列。

【问题讨论】:

  • 您正在混合使用 MVC 和 Webforms。那是行不通的。
  • 我不认为这就是我正在做的事情。我从未使用过网络表单。 @VDWWD
  • GridView = Webforms.
  • @VDWWD 感谢我猜的输入。想尝试回答这个问题吗?
  • 查看@Goti 的答案。您需要自己创建表:codeproject.com/Articles/1110431/Gridview-in-ASP-NET-MVC

标签: c# asp.net asp.net-mvc gridview


【解决方案1】:

我认为您来自 asp.net webforms 开发人员。

在 asp.net mvc 中,您不能将 gridview 用作 webforms,在 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 或任何其他客户端脚本语言来与控制器通信。

【讨论】:

  • 我以前从未使用过网络表单。我也从未使用过 javascipt 或 C# 以外的任何东西与控制器进行通信,那么为什么我“需要”呢?另外,我根本不明白您的回答如何解决我的问题。您已经在值中进行了硬编码。我需要我的表在每次加载时都有不同数量的列,并且这些列是不同的。
  • 使用桌子很好,这是我最初的计划。但同样,列的名称和数量都必须是可变的。有时Phone1不需要出现。有时确实如此。有时需要显示其他值,但并非总是如此。
  • 您可以查看此链接以供参考,codeproject.com/Articles/1110431/Gridview-in-ASP-NET-MVC
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多