EditorFor не получает нужного редактора в ASP.NET MVC 3.0 - PullRequest
1 голос
/ 26 мая 2011

У меня есть ситуация, когда я хочу использовать пользовательский EditorTemplate с ViewModel.Итак, у меня есть моя ViewModel ...

class Aspect {
}
class AspectViewModel {
}

, затем мой EditorTemplate

  • Views
    • Shared
      • EditorTemplates
        • Aspect.cshtml

Aspect.cshtml

@ model AspectViewModel

//other html

Затем в другом представлении, которое занимает AspectViewModel, я вызываю @Html.EditorFor(model => model), но это не работает.Это работает, только если я использую жестко запрограммированную строку @Html.EditorForModel("Aspect").

Есть идеи, почему его не называют?

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Вы должны назвать шаблон редактора AspectViewModel.cshtml, если он строго напечатан как AspectViewModel. Тогда все, что вам нужно сделать, это:

@model AspectViewModel
@Html.EditorForModel()

или

@model SomeViewModel
@Html.EditorFor(x => x.Aspect)

, где Aspect свойство SomeViewModel имеет тип AspectViewModel.

Соглашение состоит в том, что редактор / экран должен называться как тип свойства, для которого вы его вызываете, а не как имя этого свойства.

Они также отлично работают с коллекциями. Например, если у вас есть следующее свойство:

public class SomeViewModel
{
    public IEnumerable<AspectViewModel> Aspects { get; set; }
}

и вы используете:

@model SomeViewModel
@Html.EditorFor(x => x.Aspects)

, тогда шаблон редактора ~/Views/Shared/EditorTemplates/AspectViewModel.cshtml будет отображаться для каждого элемента этой коллекции. Благодаря этому вам больше не нужно писать циклы for / foreach в ваших представлениях.

0 голосов
/ 26 мая 2011

Это потому, что ваша модель AspectViewModel, но имя вашего вида Aspect.Они должны точно соответствовать.

...