Не уверен, как использовать HTML Helper для коллекций в моей ViewModel - PullRequest
1 голос
/ 17 марта 2012

Я пытаюсь использовать помощники HTML для коллекций, через которые я зацикливаюсь, но я не уверен, как это сделать.В частности, в приведенном ниже коде я пытаюсь создать помощники HTML (Html.EditorFor) для modulegroup.Name и modulegroup.HtmlDivId.Как это можно сделать?

    @foreach (var modulegroup in Model.SelectedPage.ModuleGroupCollection)
    {
        <div>
            @modulegroup.Name
        </div>
        <div>
            @modulegroup.HtmlDivId
        </div>
        foreach (var module in modulegroup.ModuleCollection)
         {
            <div>
                @module.Name
            </div>
            <div>
                @if(module.LockedBy !=  null) { 
                 @module.LockedBy.Name   
                }
            </div>
         }

    }

Ответы [ 2 ]

0 голосов
/ 17 марта 2012

Я полагаю, вы ищете шаблоны Editor против HTML Helpers. Вот некоторые чтения на эту тему: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

Я обычно помещаю определенные шаблоны представления в подпапку "EditorTemplates" папки представления, к которой они относятся. Для шаблонов многократного использования я бы сделал то же самое, но просто, но папку «EditorTemplates» в общей папке.

Тем не менее, вот пример, который несколько упростит ваше представление, учитывая следующий пример модели и контроллера. Обратите внимание, что это выведет следующее:

first
one
collection1
jonah jameson
collection2
spidey

Контроллер

public ActionResult Index()
{
    var model = new SampleViewModel
                    {
                        SomeGroup = new List<ModuleGroupCollection>
                                        {
                                            new ModuleGroupCollection
                                                {
                                                    HtmlDivId = "one",
                                                    Name = "first",
                                                    SomeCollection = new List<ModuleCollection>
                                                                            {
                                                                                new ModuleCollection()
                                                                                    {
                                                                                        Name = "collection1",
                                                                                        LockedBy = "jonah jameson"
                                                                                    },
                                                                                new ModuleCollection()
                                                                                    {
                                                                                        Name = "collection2",
                                                                                        LockedBy = "spidey"
                                                                                    }
                                                                            }


                                                }
                                        }

                    };

    return View("Index", model);
}

Модель :

public class SampleViewModel
{
    public IEnumerable<ModuleGroupCollection> SomeGroup { get; set; }
}

public class ModuleGroupCollection
{
    public string Name { get; set; }
    public string HtmlDivId { get; set; }
    public IEnumerable<ModuleCollection> SomeCollection { get; set; }
}

public class ModuleCollection
{
    public string Name { get; set; }
    public string LockedBy { get; set; }
}

Просмотр, обратите внимание на использование шаблонов редактора :

@model StackQuestions.Models.SampleViewModel

@foreach (var item in Model.SomeGroup) {
     @Html.EditorFor(x=>item)
     foreach (var module in item.SomeCollection)
     {
         @Html.EditorFor(x=>module)
     }
}

Шаблон редактора коллекции модулей:

@model StackQuestions.Models.ModuleCollection
<div>
   @Model.Name
</div>
<div>
    @if (Model.LockedBy != null)
    { 
        @Model.LockedBy   
    }
</div>

Шаблон редактора коллекции групп модулей:

@model StackQuestions.Models.ModuleGroupCollection
<div>
    @Model.Name
</div>
<div>
    @Model.HtmlDivId
</div>
0 голосов
/ 17 марта 2012
@{
int modulegroupIndex = 0;
int moduleIndex = 0;
}
@foreach (var modulegroup in Model.SelectedPage.ModuleGroupCollection)
{
    <div>
        @Html.EditorFor(model => model.SelectedPage.ModuleGroupCollection[modulegroupIndex].Name)
    </div>
    <div>
        @Html.EditorFor(model => model.SelectedPage.ModuleGroupCollection[modulegroupIndex].HtmlDivId)
    </div>
    foreach (var module in modulegroup.ModuleCollection)
     {
        <div>
            @Html.EditorFor(model => model.SelectedPage.ModuleGroupCollection[modulegroupIndex].ModuleCollection[moduleIndex].Name)
        </div>
        <div>
            @if(module.LockedBy !=  null) { 
             @Html.EditorFor(model => model.SelectedPage.ModuleGroupCollection[modulegroupIndex].ModuleCollection[moduleIndex].LockedBy.Name) 
            }
        </div>
        moduleIndex++;
     }
     modulegroupIndex++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...