Шаблон редактора (список переключателей) и элемент модели, вставленный в словарь, имеет тип [enum], но для словаря требуется тип модели X - PullRequest
0 голосов
/ 25 февраля 2012

Посмотрел вокруг похожие заголовки, но ничего на месте или ничего не получалось. Я понимаю, почему я получаю ошибку, я просто пытаюсь выяснить, как я могу это исправить, чтобы использовать мой EditorForModel. Я получаю эту ошибку:

Элемент модели, переданный в словарь, имеет тип «MyNameSpace.ViewModels.MyData + MyEnum», но это словарь требует модельного элемента типа 'MyNameSpace.ViewModels.MyData'.

Моя модель:

    [UIHint("MyRadioButton")]
    public MyEnum MyRadioRadioButton { get; set; }

    //
    //
    public enum MyEnum
    {
        Choice1,
        Choice2            
    }

Я использую [UIHint] для вызова шаблона Editor с именем MyRadioButton.cshtml. Теперь мое мнение также вызывает шаблон EditorTemplate, используя @Html.EditorForModel. Это часть страницы просмотра, которая вызывает общий шаблон:

@Html.EditorForModel("BasicDetails")

Оба шаблона находятся в папке «/ Shared / EditorTemplates /».

Это шаблон MyRadioButton.cshtml:

<td>
    <div class="radio">
        @Html.RadioButtonFor(m => m.MyRadioButton, "Choice1")<br />
        @Html.RadioButtonFor(m => m.MyRadioButton, "Choice2")
    </div>
</td>

Это BasicDetails.cshtml (вызывается @Html.EditorForModel выше):

@using MyNameSpace.ViewModels
@model MyData
<table>
    @Html.EditorFor(x => x.FirstName)
    @Html.EditorFor(x => x.LastName)
    @Html.EditorFor(x => x.MyRadioButton) //This is where my error is thrown
</table>

Я хочу избежать чего-либо сложного в шаблоне редактора radiobuttonlist выше, потому что там есть другие вещи (я удалил все лишнее и все еще получаю ошибку). Я использую определенный radiobuttonlist несколько раз в разных представлениях (именно поэтому я хотел шаблонировать его, а не копировать / вставлять). Любой совет?

Ответы [ 2 ]

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

Пока я просто полагаюсь на EditorForModel, чтобы получить шаблон из /EditorTemplates/, и вместо использования [UIHint] для списка переключателей, я просто вставляю группу @Html.RadioButtonFor внутри этого шаблона. Это работает для меня и служит для минимизации копирования / вставки.

В какой-то момент я должен научиться останавливаться на шаблоне> для шаблона> для шаблонной парадигмы и знать, когда достаточно достаточно. :)

0 голосов
/ 25 февраля 2012

Из BasicDetails.cshtml вы вызываете EditorFor как @Html.EditorFor(x => x.MyRadioButton).

Это означает, что тип модели, переданный в EditorFor, имеет тип Enum.

Но внутри шаблона EditorFor (MyRadioButton.cshtml)Я думаю, вы использовали класс в качестве модели.поэтому ошибки.

Итак, нам нужно изменить тип модели в MyRadioButton.cshtml на MyEnum (с пространством имен)

или

передать ту же модель в редактор для шаблона @Html.EditorFor(x=>x,"MyRadioButton")

...