我在数据库行业和类别中有2个表。它们使用IndustryId作为主键和表中的外键加入。现在我想将Industry显示为我的主菜单项和相关类别作为各个行业的子菜单项。我使用asp net mvc enity框架作为我的视觉工作室2017的编码架构。这是我在这个架构上的第一个应用程序我想要一步一步地简要解释包括模型视图和控制器。我之前在asp网络表单上做了这个绑定没有mvc。但实体框架似乎与以前的版本完全不同。
答案 0 :(得分:0)
编辑根据用户评论,他想在加载时绑定数据,制作嵌套列表,我会留下我的旧答案,因为它可能会帮助别人,我也会添加新答案,
我的建议是你将行业列表作为ViewBag传递,因为在行业表格中有与行业表相关的类别中的foriegn密钥,ef将检测该关系并在您的行业模型中将其表示为virtual Collection<Category> Categories
,这代表所有类别与这个行业有关。
你能做的就是传递它然后使用razor语法在你的视图中做这样的事情
在您的控制器中,您将其作为视图传递
ViewBag.Industries = dbContext.Industries.Include(x => x.Categories).ToList();
然后在你看来
<!-- init your list -->
<ul>
<!-- loop through your viewbag -->
foreach (var x in (List<Industry>) ViewBag.Industries)
{
<li> x.IndustryName
<!-- init your sub menu -->
<ul>
<!-- loop through your categories of this industry x -->
foreach(var c in x.Categories)
{
<li> c.CategoryName </li>
}
</ul>
</li>
}
<!-- loop end, close your list -->
</ul>
对于希望根据其他菜单值动态更新菜单内容的人,请阅读以下内容:
我要解决的问题是,首先创建接受行业ID并返回List或类别的动作,每当我的行业ID列表在前端更改(更改事件监听器)时,我使用ajax调用此操作,然后获取返回作为对象列表,使用jquery将数据绑定到我的子菜单。
之类的东西public ActionResult GetCategories(int IndustryID)
{
// this simple select query, retrieves all categories that have industry id provided
var categories = dbContext.Categories.Where(c => c.IndustryId == IndustryID).ToList();
return Json(categories);
}
ajax代码
// industryId is the id of industry in your view, apply change event listener
$('#industryId').change(function () {
// ajax call, get data
$.ajax({
type: "POST",
url: '@Url.Action("GetCategories", "controllerhere")',
data: { IndustryID: this.value},
dataType: "json"
}).done(function(data){
// Data recieved, get categories list, empty it, bind the new data
var ddl = $("#categoriesList");
ddl.empty();
ddl.append($('<option>', {value: 0,text: 'Select'})); //Newly added
// categoryID and CategoryName are properties in your category, these Names I assumed, they might change depending on your Model
$.each(data, function () {
ddl.append($('<option></option>').attr("value", this.CategoryID).text(this.CategoryName));
});
});
});
我希望这回答了你的问题,我不确定当你说实体框架不同时你是什么意思,你可以问我更具体的问题,也许我可以帮助