在一个控制器中返回两组动作 [英] Returning two sets of action in one controller

查看:68
本文介绍了在一个控制器中返回两组动作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我正在做的是在页面中显示类别列表,每个类别都包含一个类别的子列表.我有一个控制器,它返回类别列表而不包含类别子列表.我怎样才能从使用相同的控制器显示的子列表.

So what i am doing is that i am displaying a list of categories in a page and each category contains a sublist of categories. I have a controller and it is returning the list of categories without the sublist of categories. how can i get the sublist showing from using the same controller.

控制器:

 public CourseIndexVw Get(int id)
    {
        var _types = new ElementTypesService().GetElementModelsForCourseIndex(id, WebSecurity.CurrentUserId);
        var _courseIndexbyTypesVw = new CourseSectionsControllerHelper().CourseIndexTypeVw(id);
        _courseIndexbyTypesVw.Types = _types.ToList();
        var _activeType = _courseIndexbyTypesVw.Types.First();
        _courseIndexbyTypesVw.ActiveId = _activeType != null ? _activeType.Id : -1;
        return _courseIndexbyTypesVw;
    }

GetElementModelsForCourseIndex:

public List<ElementModelForCourseIndex> GetElementModelsForCourseIndex(int elementId, int userId, int depthLevel = 2)
        {
            List<ElementModelForCourseIndex> TypesName;
            ElementType type;
            using (var db = DataContextManager.AleStoredProcsContext)
            {

                TypesName = db.GetElementModelsForCourseIndex<ElementModelForCourseIndex>(elementId, userId, r => new ElementModelForCourseIndex{
                        Id = ElementsModelsForCourseIndexMap.Id(r),
                        Identity = ElementsModelsForCourseIndexMap.Identity(r)
                    }).OrderBy(n=>n.Identity).ToList();
            }
            foreach (ElementModelForCourseIndex typeContent in TypesName)
            {
                typeContent.Children = GetElementChildrenModelsForCourseIndex(elementId, userId, type.ModelId, depthLevel);
            }
        }

GetElementChildrenModelsForCourseIndex:

    public List<ElementModelForCourseIndex> GetElementChildrenModelsForCourseIndex(int elementId, int userId, ElementType typeId, int depthLevel = 2)
    {
        using (var db = DataContextManager.AleStoredProcsContext)
        {
            return db.GetElementWithCalendarAndPermsByModel<ElementModelForCourseIndex>(elementId, userId, typeId.Id, r => new ElementModelForCourseIndex
            {
                IdentityName = ElementsModelsForCourseIndexMap.IdentityName(r),
                ValueString = ElementsModelsForCourseIndexMap.ValueString(r),
                TimeReleased = ElementsModelsForCourseIndexMap.TimeReleased(r),
                TimeDue = ElementsModelsForCourseIndexMap.TimeReleased(r)
            }).OrderBy(i => i.IdentityName).ToList();
        }
    }

更新当前的问题是 typeContent.Children = GetElementChildrenModelsForCourseIndex(elementId,userId,type.ModelId,depthLevel); 我遇到的错误是:覆盖方法具有无效的参数感谢您的帮助,如果我缺少任何信息,请告诉我.谢谢!

UPDATE Current issue is with typeContent.Children = GetElementChildrenModelsForCourseIndex(elementId, userId, type.ModelId, depthLevel); The error i am getting is: the override method has invalid arguments Any Help is appreciated and if i am missing any information let me know. Thanks!

推荐答案

您可以修改模型并添加 children 属性:

You can modify your model and add a children property:

public class ElementModelForCourseIndex
{
    // *snip* your code
    public List<ElementModelForCourseIndex> Children {get; set;}
}

您可以在当前的 GetElementModelsForCourseIndex 中获取它,也可以使用如下的辅助方法:

You could either get it within your current GetElementModelsForCourseIndex or use you helper method like this:

public List<ElementModelForCourseIndex> GetElementModelsForCourseIndex(int elementId, int userId, int depthLevel = 2)
    {
        List<ElementModelForCourseIndex> courses;
        using (var db = DataContextManager.AleStoredProcsContext)
        {
            courses =  db.GetElementModelsForCourseIndex<ElementModelForCourseIndex>(elementId, userId, r => new ElementModelForCourseIndex{
                    Id = ElementsModelsForCourseIndexMap.Id(r),
                    Identity = ElementsModelsForCourseIndexMap.Identity(r)
                }).OrderBy(n=>n.Identity).ToList();
        }
        for each(ElementModelForCourseIndex course in courses)
        {
            // here you are filling the Children. 
            //You need to check if the parameters are the correct ones. 
            // Since you haven't shown the actual model class, I'm only guessing the parameters
            course.Children = GetElementChildrenModelsForCourseIndex(elementId, userId, depthLevel);
        }
        return courses;
    }

这篇关于在一个控制器中返回两组动作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆