2013-03-27 2 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; } 
} 

My Edit и создать взгляды следующим образом:

@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

Вы используете MVC3 или MVC4? – nemesv

ответ

7

Используйте @Html.NameFor(model => model)/@Html.NameForModel() вместо ViewData.ModelMetadata.PropertyName, этот метод должен дать вам желаемое имя. Он является частью пакета Mvc3Futures и был добавлен в MVC4.

+2

Примечание: атрибуты id элементов заменяют '.' на' _', поэтому, если вы хотите ссылаться на id (например, с jQuery), вы можете вместо этого использовать '@ Html.IdForModel()'. –

+0

Это. Другие ответы на подобные вопросы включают в себя создание собственной конкатенации строк для создания имени. –

Смежные вопросы