我有一个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"
。如何获得这个完全限定的名称?
答案 0 :(得分:9)
使用@Html.NameFor(model => model)
/ @Html.NameForModel()
代替ViewData.ModelMetadata.PropertyName
,此方法应该为您提供所需的名称。它是Mvc3Futures包的一部分,并被添加到MVC4。