在我的 ASP.NET Core MVC 应用程序中,我有一个注册页面,它使用模型类。我正在使用 Dapper 进行数据库连接。该表格运行良好,没有任何问题。我需要添加另一个模型,以便我可以在侧边栏中显示有关该产品的更多信息。
@model Core.Library.Models.Lead;
...............
<div class="col-md-6">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="FirstName" class="control-label">First Name</label>
<input asp-for="FirstName" class="form-control" />
<span asp-validation-for="FirstName" class="text-danger"></span>
</div>
</div>
方法#1
在控制器中,我将结果传递到视图中,如下所示。
var Result = _db.Query<BoatBasic>(
Boats.GetBasicSummaryWithEngine(BoatId, SourceWebsite)).ToList();
return View(Result);
但是当我尝试迭代时,出现错误:
@foreach (var item in Model)
{
// ...
}
错误CS1579
foreach 语句无法对“Lead”类型的变量进行操作,因为“Lead”不包含“GetEnumerator”的公共实例或扩展定义
方法#2
然后我尝试穿过
ViewBag
:
ViewBag.BoatBasic = _db.Query<BoatBasic>(
Boats.GetBasicSummaryWithEngine(BoatId, SourceWebsite)).ToList();
我正在使用 lambda 表达式来迭代它:
@BoatBasic.ForEach(x =>
{
var tmpMonthNameYear = x.MonthNameYear;
});
错误CS1977
如果不先将 lambda 表达式转换为委托或表达式树类型,则无法将其用作动态分派操作的参数。
方法#3
我已经尝试了不同问题中建议的复合模型。但这也不起作用。
string BoatId = ViewBag.BoatId;
CompositeModel compositeModel = new CompositeModel
{
lead = new Core.Library.Models.Lead(),
boatBasic = _db.Query<BoatBasic>(Boats.GetBasicSummaryWithEngine(BoatId, SourceWebsite)).ToList()
};
return View(compositeModel);
public class CompositeModel
{
public Lead lead;
public List<BoatBasic> boatBasic;
}
视图中:
@foreach (var item in Model.boatBasic)
{
// ...
<h5 class="text-muted">Model:</h5>
<p style="margin-left: 10px;">@item.Model</p>
// ...
}
错误CS1061
“Lead”不包含“boatBasic”的定义,并且找不到接受“Lead”类型的第一个参数的可访问扩展方法“boatBasic”(您是否缺少 using 指令或程序集引用?)
我不知道如何继续。我在这个网站上探索了很多解决方案,但不知何故我无法破解它。请指教。
方法 #3 是可行的方法 - 但你需要做两件事:
#1:您需要使用 properties (不是类字段)作为
CompositeModel
中的值:
public class CompositeModel
{
public Lead lead { get; set; }
public List<BoatBasic> boatBasic { get; set; }
}
#2:您需要更改视图的
@model
指令以引用该 CompositeModel
:
@model Core.Library.Models.CompositeModel;