2013-03-27 51 views
3

我有一个ASP.NET MVC 4网站,我将一个嵌套属性传递给EditorTemplate并使用ViewData.ModelMetadata.PropertyName构建字段名称,但是,这会获取子属性的属性名称,而不是属性的完整点符号名称我正在编辑。如何在EditorTemplate中获得完全合格的成员名称?

一个例子可以说明最好的:

鉴于以下类型

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看起来像5号线和6这个

<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> 

通知,在那里我已经叫ViewData.ModelMetadata.PropertyName,我只是让孩子属性名"ImageUrl"但我想"Entity.ImageUrl"。如何得到这个完全合格的名字?

+0

您使用的是MVC3还是MVC4? – nemesv 2013-03-27 09:12:41

回答

7

使用@Html.NameFor(model => model)/@Html.NameForModel()而不是ViewData.ModelMetadata.PropertyName,这种方法应该给你想要的名字。它是Mvc3Futures包的一部分,并被添加到MVC4。

+2

注意:元素的id属性用'_'代替'.',所以如果你想引用id(例如用jQuery),你可以用'@ Html.IdForModel()'代替。 – 2015-04-14 11:53:37

+0

这个。对类似问题的其他解答包括滚动您自己的字符串连接以建立名称。 – 2017-09-09 07:52:07

相关问题