如何在EditorTemplate中获取完全限定的成员名称?

Gre*_*g B 4 asp.net-mvc modelmetadata asp.net-mvc-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; }
}
Run Code Online (Sandbox Code Playgroud)

我的编辑和创建视图如下:

@model EditEntityViewModel

<div>
    @Html.EditorFor(model => model.Entity.ImageUrl , "_ImageUploader")
</div>
Run Code Online (Sandbox Code Playgroud)

_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>
Run Code Online (Sandbox Code Playgroud)

渲染的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>
Run Code Online (Sandbox Code Playgroud)

在第5和第6行的注意事项,我打电话ViewData.ModelMetadata.PropertyName给我,我只是得到了孩子的属性名,"ImageUrl"但我想要"Entity.ImageUrl".如何获得这个完全限定的名称?

Dim*_*ima 10

使用@Html.NameFor(model => model)/ @Html.NameForModel()代替ViewData.ModelMetadata.PropertyName,此方法应该为您提供所需的名称.它是Mvc3Futures包的一部分,并被添加到MVC4中.

  • 注意:元素的id属性将`.`替换为`_`,因此如果要引用id(例如使用jQuery),可以使用`@ Html.IdForModel()`代替. (3认同)