C# MVC4-需要根据按下的链接传回ID
我有一个带有以下菜单项的导航菜单C# MVC4-需要根据按下的链接传回ID,c#,sql,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Sql,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我有一个带有以下菜单项的导航菜单 资产 环境 进程 每个菜单项都保存在我的数据库中名为RiskType的表中 风险类型表 身份证 描述 单击菜单项时,它将显示一个包含表的视图,该表将包含该风险类型的所有关联数据 只有3种风险类型,我不想创建3个单独的视图来显示每种风险类型的相关数据,而是想使用一个视图。目前,我已将每个风险类型ID硬编码到它的ActionLink中,如下所示 操作链接 <li>@Html.ActionLink("Assets", "ViewRiskTypes
- 资产
- 环境
- 进程
- 身份证
- 描述
<li>@Html.ActionLink("Assets", "ViewRiskTypes", "RiskTypeDetails", new { SelectedRiskTypeID = 0}, null)</li>
<li>@Html.ActionLink("Enviromental", "ViewRiskTypes", "RiskTypeDetails", new { SelectedRiskTypeID = 1 }, null)</li>
<li>@Html.ActionLink("Processes", "ViewRiskTypes", "RiskTypeDetails", new { SelectedRiskTypeID = 2 }, null)</li>
public class RiskTypeItem
{
public int ID { get;set; }
public string Name { get;set;}
}
@Html.ActionLink(“资产”、“查看风险类型”、“风险类型详细信息”,新建{SelectedRiskTypeID=0},空)
@ActionLink(“Environmental”、“ViewRiskTypes”、“RiskTypeDetails”,新建{SelectedRiskTypeID=1},null)
@ActionLink(“进程”、“ViewRiskTypes”、“RiskTypeDetails”,新的{SelectedRiskTypeID=2},null)
动作控制器
public ActionResult ViewRiskTypes(int SelectedRiskTypeID)
{
var RiskTypes = _DBContext.RiskTypes.ToList();
var ViewModel = new List<RiskTypeWithDetails>();
foreach (var RiskType in RiskTypes)
{
if (RiskType.ID == SelectedRiskTypeID)
{
var Details = new RiskTypeWithDetails();
Details.RiskTypeDescription = RiskType.Description;
Details.RiskDetails = _DBContext
.RiskTypeHasGroups
.Where(r => r.RiskTypeID == SelectedRiskTypeID)
.Select(r => new RiskDetails
{
RiskGroupDescription = r.RiskGroup.Description,
GroupType = r.RiskGroup.RiskGroupHasGroupTypes
.Select(v => v.GroupType).ToList(),
//GroupTypeName = r.RiskGroup.RiskGroupHasGroupTypes.Select(v => v.GroupType.Name).ToList(),
Owner = r.RiskGroup.RiskGroupHasGroupTypes.Select(v => v.GroupType.Owner).ToList()
}).ToList();
ViewModel.Add(Details);
}
}
return View(ViewModel);
}
public ActionResult视图风险类型(int-SelectedRiskTypeID)
{
var RiskTypes=_DBContext.RiskTypes.ToList();
var ViewModel=新列表();
foreach(风险类型中的var风险类型)
{
如果(RiskType.ID==SelectedRiskTypeID)
{
var Details=新的RiskTypeWithDetails();
Details.RiskTypeDescription=RiskType.Description;
Details.RiskDetails=\u DBContext
.风险类型组
.其中(r=>r.RiskTypeID==SelectedRiskTypeID)
.选择(r=>new RiskDetails
{
RiskGroupDescription=r.RiskGroup.Description,
GroupType=r.RiskGroup.RiskGroupHasGroupType
.Select(v=>v.GroupType).ToList(),
//GroupTypeName=r.RiskGroup.RiskGroupHasGroupTypes.Select(v=>v.GroupType.Name).ToList(),
Owner=r.RiskGroup.RiskGroupHasGroupTypes.Select(v=>v.GroupType.Owner).ToList()
}).ToList();
ViewModel.Add(详细信息);
}
}
返回视图(ViewModel);
}
这并不理想,因为管理员可能会添加新的风险类型或删除现有的风险类型
我知道我需要将所选风险类型ID传递到视图操作控制中,但如果有人能提供一些建议,我不确定这样做的最佳方法是什么
提前感谢您的帮助。呈现动作链接的视图应该有一个视图模型。此视图模型需要包含从数据库填充的风险类型列表。例如,类似这样的内容: 风险类型项目的类别
<li>@Html.ActionLink("Assets", "ViewRiskTypes", "RiskTypeDetails", new { SelectedRiskTypeID = 0}, null)</li>
<li>@Html.ActionLink("Enviromental", "ViewRiskTypes", "RiskTypeDetails", new { SelectedRiskTypeID = 1 }, null)</li>
<li>@Html.ActionLink("Processes", "ViewRiskTypes", "RiskTypeDetails", new { SelectedRiskTypeID = 2 }, null)</li>
public class RiskTypeItem
{
public int ID { get;set; }
public string Name { get;set;}
}
视图模型
public class ActionsModel
{
public List<RiskTypeItem> RiskTypes { get; set; }
public ActionsModel()
{
RiskTypes = new List<RiskTypeItem>();
}
}
查看
// First line.
@model ActionsModel
//...other stuff...
<ul>
@foreach(var riskType in Model.RiskTypes)
{
<li>@Html.ActionLink(riskType.Name, "ViewRiskTypes", "RiskTypeDetails", new { SelectedRiskTypeID = riskType.ID }, null)</li>
}
</ul>
//第一行。
@模型动作模型
//…其他东西。。。
@foreach(Model.RiskTypes中的var riskType)
{
- @ActionLink(riskType.Name,“viewsriskTypes”,“RiskTypeDetails”,新的{SelectedRiskTypeID=riskType.ID},null)
}
如果您已经为此特定视图使用了ViewModel,那么只需修改该视图,即可为
RiskTypes
列表添加新属性。为什么不从db创建操作链接而不是硬编码?而不是If语句,只从dbDBContext.RiskTypes.Where(x=>x.RiskTypeID==selectedID)获取相关的risktype
是的,我不想使用硬编码的操作链接,你所说的“从db而不是硬编码创建操作链接”是什么意思,这就是我不确定该怎么做的?谢谢你提供的好例子,这正是我想要的。这足以帮助我理解。