在视图中使用多个 ASP.NET Core MVC 模型

问题描述 投票:0回答:1

在我的 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 指令或程序集引用?)

我不知道如何继续。我在这个网站上探索了很多解决方案,但不知何故我无法破解它。请指教。

asp.net-core-mvc multiple-views
1个回答
0
投票

方法 #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; 
© www.soinside.com 2019 - 2024. All rights reserved.