2

私はこのようなモデルを持っています:

public class MyModel {
    [ScaffoldColumn(false)]
    public int CharityId { get; set; }

    [UIHint("Charities")]
    public SelectList Charities { get; set; }
}

次に、Charities.cshtml という名前の EditorTemplate があります。

@model MyModel

@Html.DropDownListFor(model => model.CharityId, Model.Charities)

次に、私のページで:

@model MyModel

@Html.EditorForModel()

ただし、いずれにせよ、Charities テンプレートはレンダリングされません。私はこれについて頭を悩ませてきましたが、うまくいくはずです..しかし、そうではありません。

何か案は?

編集:

問題は、UIHint があっても、既定の Object テンプレートがそれ自体以外の複雑なオブジェクトをレンダリングしない (いわゆる浅いダイビング) ことです。UIHint を使用するとテンプレートがレンダリングされるという印象を受けましたが、明らかに間違っていました。

修正は、モデル自体をレンダリングさせないようにすることです。それは悲しいことです。

4

1 に答える 1

5

あなたのページの最初@EditoFormodel()にあるものは奇妙に見えます。私はあなたが何か他のことを意味したと思います。

Charities要点を言えば、プロパティを で装飾しましたUIHint。このプロパティのタイプはSelectListです。これは、Charities.cshtmlテンプレートを に強く型付けする必要があることSelectListを意味しMyModelます。この UIHint 属性を削除するだけで、次のビュー モデルを使用できます。

public class MyModel {
    [ScaffoldColumn(false)]
    public int CharityId { get; set; }

    public SelectList Charities { get; set; }
}

そしてあなたの見解では:

@model MyModel
@Html.EditorForModel()

そして、内部には次のもの~/Views/Shared/EditorTemplates/MyModel.cshtmlがあります:

@model MyModel
@Html.DropDownListFor(model => model.CharityId, Model.Charities)

それが標準的な規則です。エディター テンプレートを呼び出したい場合Charities.cshtmlは、ページで次のように実行できます。

@model MyModel
@Html.EditorForModel("Charities")

ただし、通常は次のモデルがあります。

public class FooViewModel
{
    [UIHint("Charities")]
    public MyModel Charities { get; set; }
}

メインビューが強く型付けされてFooViewModelいる場合は、次のことができます。

@model FooViewModel
@Html.EditorFor(x => x.Charities)

Charities.cshtmlこれにより、エディター テンプレートがレンダリングされます。

于 2011-08-29T19:22:04.370 に答える