如何在下拉菜单中为子项添加空间?

时间:2015-07-10 10:57:33

标签: html5 razor asp.net-mvc-5 html-helper

我试图在下拉列表选择列表中显示父子元素。如下图enter image description here

我有foreach中的代码

@helper GetOption(List<Project_Cost_Management_System.Models.ChartOfAccount> model1, Guid? parentid) 
{
    foreach (var item3 in model1.Where(s => s.ParentAccountId.Equals(parentid)))
    {


        var zs3 = model1.Where(s => s.ParentAccountId == item3.Id);
        int count3 = zs3.Count();
        if (count3 >= 0)
        {
            if(@item3.ParentAccountId == null)
            { 
             <option value="@item3.Id">@item3.Name</option>
            }
            else
            {
                var cout = model1.Count();
                <option value="@item3.Id"> @item3.Name   @model1.Where(s => s.dataid == @item3.dataparentid).Select(d => d.Name).First(). </option>
            }
        }
        if (count3 > 0)
        {
            @GetOption(model1, item3.Id)
        }

    }
}

但显示为enter image description here

如何显示第一张照片。

2 个答案:

答案 0 :(得分:1)

您可以使用<optgroup>来实现您正在寻找的内容,因此您呈现的HTML最终会像:

<option value="...">Professional Fees</option>
<optgroup label="Property Related Expenses">
    <option value="...">Maintenance Contribution</option>
    ...
</optgroup>
...

您可能遇到的唯一问题是,您的实际分组本身并不是有效选项,即您无法选择“属性相关费用”,因为它只是一个分组标签。您也无法以这种方式真正控制右对齐的描述性文本。通常,HTML select元素非常有限,并且不允许进行大量自定义。

当您需要更多高级功能时,您必须移动某种类型的库,该库创建一个“控件”,模仿具有更多可自定义HTML元素的选择列表的功能。在互联网上有一百万个不同的这样的库,但我特别喜欢Select2.js。特别是对于您的场景,请参阅“模板”部分。

答案 1 :(得分:0)

我得到了答案。

在模型类中添加另一个字段作为层次结构。

使用层次结构添加空间。我添加我的代码以供参考。

@helper GetOption(List<Project_Cost_Management_System.Models.ChartOfAccount> model1, Guid? parentid)
{

    foreach (var item3 in model1.Where(s => s.ParentAccountId.Equals(parentid)))
    {

        var zs3 = model1.Where(s => s.ParentAccountId == item3.Id);
        int count3 = zs3.Count();
        if (count3 >= 0)
        {
            if (@item3.ParentAccountId == null)
            {
                <option value="@item3.Id">@item3.Name</option>
            }
            else
            {
                int str = @item3.Hierarchy * 3;
                string str1 = " ".ToString().PadRight(str);
                str1 = str1.Replace(" ", "\u00a0");
                <option value="@item3.Id">@str1 @item3.Name</option>

            }
        }
        if (count3 > 0)
        {
            @GetOption(model1, item3.Id)
        }

    }
}