【问题标题】:How to display nodes as checkbox list如何将节点显示为复选框列表
【发布时间】:2019-05-14 11:05:27
【问题描述】:

我已经阅读了一些类似的帖子,但无法为我工作。

我会尽我所能解释我的问题。

我有节点(类别),并且我的成员具有链接到此节点(类别)的 MNTP 属性。

我设法显示所有类别,并在我的视图中找到了成员选择的类别,但我不知道如何将复选框显示为已选中,如果它是由成员选择的,而不是在提交表单后将此数据传递给控制器​​,以便我可以保存这个值到 MNTP。

这是我现在所穿的:

查看:

    @using (Html.BeginUmbracoForm<CategoriesController>("SaveCategories"))
    {

            // GET ALL CATEGORIES FROM CATEGORY LIST
            var categories = Umbraco.Content(Guid.Parse("7ad9518b-2069-4ac5-9035-e052decf6e05")).Children().Where(x => x.IsVisible() && x.Name != null).ToArray();

            // GET MEMBER BY ID
            var member = Services.MemberService.GetById(1148);

            // CREATE LIST OF MEMBER CATEGORIES
            List<IPublishedContent> memberCategories = new List<IPublishedContent>();

            // GET MEMBER PROPERTY WITH LIST OF UDI-s
            var memberCategoriesUdi = member.GetValue<string>("categoryPicker");

            // CHECK IF MEMBERPROPERTY IS EMPTY
            if (memberCategoriesUdi != null)
            {
                foreach (var udi in memberCategoriesUdi.Split(','))
                {
                    //OCNVERT UDI TU IPublishedContent
                    var cer = Umbraco.Content(Udi.Parse(udi)).DescendantsOrSelf()
                                                     .Where(x => x.IsVisible()).ToArray(); ;

                    foreach (var category in cer)
                    {
                        //ADD CATEGORIES TO LIST
                        memberCategories.Add(category);
                    }
                }
            }


        if (categories.Length > 0)
        {

            var naviLevel = categories[0].Level;


            <ul class="list-group list-group-flush level-@(naviLevel)">
                @* Loop through the selection *@
                @foreach (var item in categories)
                {

                    <li>
                        @if (memberCategories.Contains(item))
                        {
//IF MEMBER HAS ALREDY PICKED THAT CATEGORY SHOW THIS:
                            @Html.CheckBoxFor(m => m.IsSelected, new { @checked = true }) @item.Name
                        }
                        else
                        {
                            @Html.CheckBoxFor(m => m.IsSelected, new { @checked = false }) @item.Name
                        }

                        @{
                            var children = item.Children.Where(x => x.IsVisible() && x.Name != null).ToArray();
                            if (children.Length > 0)
                            {
                                @ChildPages(children)
                            }
                        }
                    </li>
                }
            </ul>
        }

        <button type="submit" class="btn btn-success btn-block"><i class="px-2 fa fa-sign-in fa-lg"></i>save</button>
    }

型号:

public class MemberCategories
{
    public int CategoryId { get; set; }
    public bool IsSelected { get; set; }
}
public class categories
{
    public List<MemberCategories> SelectedCategories { get; set; }
}

控制器:

 [HttpPost]
    public ActionResult SaveCategories(categories model)
    {
        if (ModelState.IsValid)
        {

        }
            return CurrentUmbracoPage();
    }

【问题讨论】:

    标签: c# asp.net-mvc razor umbraco


    【解决方案1】:

    尝试以下代码更改:

    @if (memberCategories.Contains(item))
    {
        //IF MEMBER HAS ALREDY PICKED THAT CATEGORY SHOW THIS:
        @Html.CheckBoxFor(m => m.IsSelected, new { @checked = true }) @item.Name
    }
    else
    {
        @Html.CheckBoxFor(m => m.IsSelected, new { @checked = false }) @item.Name
    }
    

    应该是:

    @if (memberCategories.Any(i => i.Id == item.Id))
    {
        //IF MEMBER HAS ALREDY PICKED THAT CATEGORY SHOW THIS:
        @Html.CheckBoxFor(m => m.IsSelected, new { @checked = true }) @item.Name
    }
    else
    {
        @Html.CheckBoxFor(m => m.IsSelected, new { @checked = false }) @item.Name
    }
    

    .Contains 必须是完全匹配的,但有时不同集合中的相同项目之间不完全匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2017-04-19
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多