加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在ASP.NET MVC中定义视图级变量?

发布时间:2020-12-16 07:03:42 所属栏目:asp.Net 来源:网络整理
导读:我有一个cshtml局部视图(Razor引擎),用于递归渲染.我在这个视图中定义了两个声明性 HTML帮助函数,我需要在它们之间共享一个变量.换句话说,我想要一个视图级变量(不是函数级变量). @using Backend.Models;@* These variables should be shared among function
我有一个cshtml局部视图(Razor引擎),用于递归渲染.我在这个视图中定义了两个声明性 HTML帮助函数,我需要在它们之间共享一个变量.换句话说,我想要一个视图级变量(不是函数级变量).

@using Backend.Models;
@* These variables should be shared among functions below *@    
@{
    List<Category> categories = new ThoughtResultsEntities().Categories.ToList();
    int level = 1;
}

@RenderCategoriesDropDown()

@* This is the first declarative HTML helper *@
@helper RenderCategoriesDropDown()
{
    List<Category> rootCategories = categories.Where(c => c.ParentId == null).ToList();
    <select id='parentCategoryId' name='parentCategoryId'>
    @foreach (Category rootCategory in rootCategories)
    {
        <option value='@rootCategory.Id' class='level-@level'>@rootCategory.Title</option>
        @RenderChildCategories(rootCategory.Id);
    }
</select>
}

@* This is the second declarative HTML helper *@
@helper RenderChildCategories(int parentCategoryId)
{
    List<Category> childCategories = categories.Where(c => c.ParentId == parentCategoryId).ToList();
    @foreach (Category childCategory in childCategories)
    {
        <option value='@childCategory.Id' class='level-@level'>@childCategory.Title</option>
        @RenderChildCategories(childCategory.Id);
    }
}

解决方法

你不能这样做.您需要将它们作为参数传递给辅助函数:

@using Backend.Models;
@{
    List<Category> categories = new ThoughtResultsEntities().Categories.ToList();
    int level = 1;
}

@RenderCategoriesDropDown(categories,level)

@helper RenderCategoriesDropDown(List<Category> categories,int level)
{
    List<Category> rootCategories = categories.Where(c => c.ParentId == null).ToList();
    <select id='parentCategoryId' name='parentCategoryId'>
    @foreach (Category rootCategory in rootCategories)
    {
        <option value='@rootCategory.Id' class='level-@level'>@rootCategory.Title</option>
        @RenderChildCategories(categories,level,rootCategory.Id);
    }
    </select>
}

@helper RenderChildCategories(List<Category> categories,int level,int parentCategoryId)
{
    List<Category> childCategories = categories.Where(c => c.ParentId == parentCategoryId).ToList();
    @foreach (Category childCategory in childCategories)
    {
        <option value='@childCategory.Id' class='level-@level'>@childCategory.Title</option>
        @RenderChildCategories(categories,childCategory.Id);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读