1

EditorTemplateViewModelでカスタムを使用したいという状況があります。だから私は私のViewModelを持っています...

class Aspect {
}
class AspectViewModel {
}

次に、私のEditorTemplate

  • ビュー
    • 共有
      • EditorTemplates
        • Aspect.cshtml

Aspect.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 に答える