Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC4-需要根据按下的链接传回ID_C#_Sql_Asp.net Mvc_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

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

我有一个带有以下菜单项的导航菜单

  • 资产
  • 环境
  • 进程
每个菜单项都保存在我的数据库中名为RiskType的表中

风险类型表

  • 身份证
  • 描述
单击菜单项时,它将显示一个包含表的视图,该表将包含该风险类型的所有关联数据

只有3种风险类型,我不想创建3个单独的视图来显示每种风险类型的相关数据,而是想使用一个视图。目前,我已将每个风险类型ID硬编码到它的ActionLink中,如下所示

操作链接

 <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语句,只从db
    DBContext.RiskTypes.Where(x=>x.RiskTypeID==selectedID)获取相关的risktype
    是的,我不想使用硬编码的操作链接,你所说的“从db而不是硬编码创建操作链接”是什么意思,这就是我不确定该怎么做的?谢谢你提供的好例子,这正是我想要的。这足以帮助我理解。