c# - 如何在一个视图中使用两个模型?
问题描述
我试图在一个视图中使用在两个不同模型中创建的变量。我正在使用 View Model 方法来做到这一点。但是在我看来,模型中的变量无法识别,并引发错误;
“‘CategoryItemViewModel’不包含‘result’的定义,并且找不到接受‘CategoryItemViewModel’类型的第一个参数的可访问扩展方法‘result’(您是否缺少 using 指令或程序集引用?”
您可以在下面看到两个原始模型的代码;
类别型号:
public class Category
{
public string result { get; set; }
public char[] delimiterChar { get; set; }
public Array userData { get; set; }
}
商品型号:
public class Item
{
public Array userDataItems { get; set; }
}
第三,我创建了一个视图模型,旨在将上述两个模型链接为一个,
视图模型:
public class CategoryItemViewModel
{
public Item ItemList { get; set; }
public Category CategoryList { get; set; }
}
最后,我有一个控制器负责组合必要的模型以及初始化它们并将它们返回到视图模型,以便它们可以在视图中使用:
public ActionResult GetCategoryItem()
{
CategoryItemViewModel CIVM = new CategoryItemViewModel();
CIVM.ItemList = GetItemModel();
CIVM.CategoryList = GetCategoryModel();
return View(CIVM);
}
public Category GetCategoryModel()
{
var dataFile = Server.MapPath("~/App_Data/Category.txt");
Category cModel = new Category()
{
result = "",
delimiterChar = new[] { ',' },
userData = System.IO.File.ReadAllLines(dataFile) //Category Text File
};
return cModel;
}
public Item GetItemModel()
{
var dataFileItems = Server.MapPath("~/App_Data/Category.txt");
Item iModel = new Item()
{
userDataItems = System.IO.File.ReadAllLines(dataFileItems) //Items Text File
};
return iModel;
}
请注意,我正在为我的控制器和视图使用如下命名空间:
控制器命名空间:
using System.Web.Mvc;
using u18043039_HW3.ViewModel;
using u18043039_HW3.Models;
查看命名空间:
@using u18043039_HW3.Models
@using u18043039_HW3.Controllers
@model u18043039_HW3.ViewModel.CategoryItemViewModel
最后,我的看法:
@Model.result
@if (Model.result == "")
{
int count = 0;
foreach (String dataLine in Model.userData)
{
string countString = count.ToString();
string target = "dataLine" + countString;
string trigger = "#" + target;
<p>
<a data-toggle="collapse" href="@trigger" role="button" aria-expanded="false" aria-controls="collapseExample">
@dataLine.Split(Model.delimiterChar)[0]
</a>
<button class="btn" onclick="location.href='@Url.Action("Items", "Items")'" id="@dataLine.Split(Model.delimiterChar)[1]"><i class="fas fa-plus secondaryPlusIcon" id="@dataLine.Split(Model.delimiterChar)[1]"></i></button>
<button class="btn" id="@dataLine.Split(Model.delimiterChar)[1]"><i class="far fa-edit secondaryEditIcon" id="@dataLine.Split(Model.delimiterChar)[1]"></i></button>
<button class="btn" id="@dataLine.Split(Model.delimiterChar)[1]"><i class="far fa-trash-alt secondaryDeleteIcon" id="@dataLine.Split(Model.delimiterChar)[1]"></i></button>
</p>
<div class="collapse" id="@target">
<div class="card card-body w-25 p-3 collapsible" id="@dataLine.Split(Model.delimiterChar)[1]">
<!-- Card Elements here -->
</div>
</div>
count++;
}
}
解决方案
在您的视图中,Model 代表 CategoryItemViewModel,要查看结果,您需要先访问 CategoryList。
所以你应该做@Model.CategoryList.result
推荐阅读
- selenium-webdriver - 使用 selenium 获取完整的数据表抓取
- javascript - 与内容脚本的通信失败。谷歌浏览器扩展应用程序
- c# - 从项目文件夹中获取 Razor 中的图像
- go - 如何在 confluent-kafka-go 中创建具有多个消费者的消费者组?
- file - 控制台中没有文件显示
- windows - 修改现有的 cmd 命令
- javascript - Cypress Cucumber ^ ParseError: Unexpected token
- php - 在 laravel 中一次发布所有计划任务
- c# - EF Core 无法添加实体类型“ClientType”的种子实体,因为属性“Id”需要非零值
- python - 将加载的 Keras 分类器与自定义指标函数一起使用时出错