1

我有一种情况,我想将自定义EditorTemplate与 ViewModel 一起使用。所以我有我的 ViewModel ......

class Aspect {
}
class AspectViewModel {
}

然后是我的 EditorTemplate

  • 意见
    • 共享
      • 编辑器模板
        • 方面.cshtml

方面.cshtml

@model AspectViewModel

// 其他html

然后在另一个视图中AspectViewModel,我调用@Html.EditorFor(model => model)了 ,但它不起作用。仅当我使用硬编码字符串时才有效@Html.EditorForModel("Aspect")

知道为什么不调用它吗?

4

2 回答 2

3

如果编辑器模板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循环。

于 2011-05-25T21:22:18.917 回答
0

这是因为您的模型是AspectViewModel,但您的视图名称是Aspect。它们必须完全匹配。

于 2011-05-25T21:21:51.723 回答