4

ASP.NET MVC 4サイトがあり、ネストされたプロパティをEditorTemplateに渡し、を使用してフィールド名を作成してViewData.ModelMetadata.PropertyNameいますが、これは、私がいるプロパティの完全なドット表記名ではなく、子プロパティのプロパティ名を取得します編集。

例が最もよく説明されます:

次のタイプが与えられます

public class EditEntityViewModel
{
     // elided
     public Entity Entity { get; set}
}


public class Entity 
{
    // elided
    public string ImageUrl { get; set; }
}

私の編集ビューと作成ビューは次のとおりです。

@model EditEntityViewModel

<div>
    @Html.EditorFor(model => model.Entity.ImageUrl , "_ImageUploader")
</div>

_ImageUploader.cshtmlエディターテンプレートは次のとおりです

@model System.String

<div class="uploader">
    @Html.LabelFor(model => model)
    @Html.HiddenFor(model => model)
    <div data-rel="@(ViewData.ModelMetadata.PropertyName)">   
        <input type="file" name="@(ViewData.ModelMetadata.PropertyName)Upload" />
    </div>
</div>

レンダリングされたHTMLは次のようになります

<div>
   <div class="uploader">
        <label for="Entity_ImageUrl">Image</label>
        <input id="Entity_ImageUrl" name="Entity.ImageUrl" type="hidden"/>
        <div data-rel="ImageUrl"> <!-- Problem -->
             <input type="file" name="ImageUrlUpload" /><!-- Problem -->
        </div>
    </div>
</div>

5行目と6行目で、私が呼び出したところに注意してください。ViewData.ModelMetadata.PropertyName子プロパティ名しか取得していませんが、"ImageUrl"必要です"Entity.ImageUrl"。この完全修飾名を取得するにはどうすればよいですか?

4

1 に答える 1

10

の代わりに@Html.NameFor(model => model)/を使用すると、このメソッドで目的の名前を付けることができます。これはMvc3Futuresパッケージの一部であり、 MVC4に追加されました。@Html.NameForModel()ViewData.ModelMetadata.PropertyName

于 2013-03-27T09:15:11.103 に答える