Asp.net 如何从视图调用控制器中的方法并返回对象

Asp.net 如何从视图调用控制器中的方法并返回对象,asp.net,asp.net-mvc-2,Asp.net,Asp.net Mvc 2,我有一个MVC应用程序,它有一个控制器,该控制器有一个返回IEnumerable的递归方法 public static IEnumerable<Category> GetSubCategoriesFor(int catId) { var subs = _db.Category.Where(c => c.parrent_id == catId); foreach (var sub in subs) {

我有一个MVC应用程序,它有一个控制器,该控制器有一个返回IEnumerable的递归方法

public static IEnumerable<Category> GetSubCategoriesFor(int catId)
    {
        var subs = _db.Category.Where(c => c.parrent_id == catId);

        foreach (var sub in subs)
        {
            yield return sub;

            // Recursive call
            foreach (var subsub in GetSubCategoriesFor(sub.category_id))
            {
                yield return subsub;
            }
        }
公共静态IEnumerable GetSubcategories for(int catId)
{
var subs=\u db.Category.Where(c=>c.parrent\u id==catId);
foreach(子系统中的var子系统)
{
收益率分包;
//递归调用
foreach(GetSubCategoriesFor(sub.category_id))中的var子类
{
收益子项;
}
}
重点是我需要我的视图来显示所有类别、子类别和子类别中的问题(这是一个问题列表)

所以我的问题是,从我的观点来看,如何调用这个方法

我见过一些例子,其中他们使用Html.Action,但我不能遍历字符串或void


提前感谢!

如果要进行未知数量的迭代,则需要使用HTML帮助程序


获取子类别的方法通过返回一个混合类别、子类别等的列表,似乎正在扁平化您的层次结构

我个人会使用显示模板。例如,如果我有以下视图模型:

public class CategoryViewModel
{
    public int Id { get; set; }
    public IEnumerable<string> Questions { get; set; }
    public IEnumerable<CategoryViewModel> Subcategories { get; set; }
}
然后我的
~/Views/Home/Index.aspx
视图将如下所示:

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master"
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<AppName.Models.CategoryViewModel>>" 
%>
<ul>
    <%= Html.DisplayForModel() %>
</ul>

现在是ASP.NET MVC模板帮助程序负责遍历目录树结构并在视图上显示内容。您可以通过定义一个复杂的
QuestionViewModel
来进一步扩展它,而不是我使用的字符串,并为此问题定义一个显示模板
~/Views/Home/DisplayTemplates/QuestionViewModel.ascx
它将为类别的
Questions
属性的每个元素呈现。

谢谢你的回答。递归可以使用这种方法吗?例如,如果子类别有子类别,它将显示多少级别?这就是我的数据库模型的外观:@Nanek,嵌套的级别此方法可以处理的子类别是无限的。您可以有任意多个子类别:-)我如何从控制器填充ViewModel?如果您查看我提供的链接,您可以看到类名。我使用实体框架加载数据库。很抱歉我的无知
<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master"
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<AppName.Models.CategoryViewModel>>" 
%>
<ul>
    <%= Html.DisplayForModel() %>
</ul>
<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.CanalViewModel>" 
%>
<li>
    <div>
        <h3><%= Html.DisplayFor(x => x.Id) %></h3>
        <%= Html.DisplayFor(x => x.Questions) %>
    </div>
    <ul>
        <%= Html.DisplayFor(x => x.Subcategories) %>
    </ul>
</li>