Бритва ведет себя странно? - PullRequest
0 голосов
/ 01 июля 2011

Бритва со мной шутит. У меня есть частичное представление:

@model ManageMvc.Models.Default.Classes.MvcModule           
@{
    if (Model.CanExpand)
    {
        Response.Write("Crazy");
        @:TEST
        <text>ojiiojjiojiojiojiojiojiojio</text>
        Response.Write("Crazy2");
    }
    else
    {
        Response.Write("Crazy");
        @:TEST
        <text>ssssssssdffffffff</text>
        Response.Write("Crazy2");
    }
}

Это называется так:

@if (Model.Modules.Count > 0)
{
    for (var i = 0; i < Model.Modules.Count; i++)
    {
        Html.Partial("~/Views/UserControls/_MenuItem.cshtml", Model.Modules[i]);
    }
    ....
}

Я ожидал, что бритва распечатает то, что написано внутри блока Text и блока @ :. Но я ничего не понимаю. Когда я запускаю это, он просто печатает CrazyCrazy2 (для каждого модуля в списке). Я что-то пропустил?

Обновлено

Код, который вызывает if (Model.Modules.Count> 0), сам является частичным. Этот вызывается со страницы макета. Таким образом, верхний код - это вторая частичная функция. Может ли это иметь какое-то значение?

Макет -> Главное меню (частичное) -> СоздатьMenuItem (частичное)

Обновлено

Это новый код: (_MenuItem.cshtml внутри Shared-> DisplayTemplates)

@model ManageMvc.Models.Default.Classes.MvcModule          
@{
    if (Model.CanExpand)
    {
        @:TEST
        <text>ojiiojjiojiojiojiojiojiojio</text>
    }
    else
    {
        @:TEST
        <text>ssssssssdffffffff</text>        
    }
}

Частичное представление MainMenu, которое вызывает пункт меню:

@Html.DisplayFor(x => x.Modules, "_MenuItem")

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

Элемент модели, передаваемый в словарь, имеет тип 'System.Collections.Generic.List`1 [ManageMvc.Models.Default.Classes.MvcModule]', но для этого словаря требуется элемент модели типа 'ManageMvc.Models. Default.Classes.MvcModule.

1 Ответ

0 голосов
/ 03 июля 2011

Поместите @ при вызове помощника Html.Partial и избегайте использования Response.Write в представлении ASP.NET MVC:

for (var i = 0; i < Model.Modules.Count; i++)
{
    @Html.Partial("~/Views/UserControls/_MenuItem.cshtml", Model.Modules[i]);
}

Также вместо того, чтобы писать некрасивые циклы, я настоятельно рекомендую вамиспользуя шаблонных помощников.Поэтому замените цикл for в макете следующим простым помощником:

@Html.DisplayFor(x => x.Modules)

, а затем определите шаблон отображения (~/Views/Shared/DisplayTemplates/MvcModule.cshtml), который будет отображаться для каждого элемента коллекции Modules:

@model ManageMvc.Models.Default.Classes.MvcModule           
@if (Model.CanExpand)
{
    @:TEST
    <text>ojiiojjiojiojiojiojiojiojio</text>
}
else
{
    @:TEST
    <text>ssssssssdffffffff</text>
}

Видите, как это проще?

...