【发布时间】: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