0

私はモデルを持っています: メニューは menuComponent のサブクラスです

メニュー コンポーネントには、Name と Description の 2 つのプロパティがあります。どちらも文字列です。

編集ビューを作成し、editorForModel() で編集フィールドを作成しようとしました。ただし、編集フィールドは作成されません。

@using (Html.BeginForm())
{ 
    @Html.EditorForModel();
    <input type="submit" value="Save" /> 
    @Html.ActionLink("Cancel and return to List", "Index") 
}

@HTML.EditorFor() を使用して編集フィールドを作成する必要があります

 @using (Html.BeginForm())
    { 
        @Html.EditorFor(m => m.Name);
        @Html.EditorFor(m => m.Description);
        <input type="submit" value="Save" /> 
        @Html.ActionLink("Cancel and return to List", "Index") 
    }

なぜこれが起こるのですか?

4

1 に答える 1

2

これはマイクロソフトに報告したバグです: http://connect.microsoft.com/VisualStudio/feedback/details/636341/modelmetadata-fromlambdaexpression-has-changed-in-asp-net-mvc-3-rtm

基本的に、エディタおよび表示テンプレートは、親クラスではなく、モデルの正確な現在のタイプのプロパティのみを検索します。

彼らの公式の答えはこれです:

こんにちはダーリン(およびその他)、

これは、ASP.NET MVC 3 に導入した意図的な変更であり、継承されたモデルのサポートを強化するか、インターフェイスを実装するモデルのサポートを強化するかのトレードオフの結果でした。私たちは継承モデルを支持することになりました。これは、私たちの経験から、より一般的なアプローチです。

根本的な問題は、インターフェイスがクラスによって実装されている場合、そのクラスはインターフェイスのメンバーを実際には継承しないことです。ここで重要なのは、インターフェイスのメンバーを継承しないため、それらのメンバーのメタデータも継承しないことです。

ありがとう、ASP.NET チーム

したがって、基本的にはバグとは見なされませんが、仕様によるものです。

于 2013-10-18T13:18:18.923 に答える