2012-05-21 2 views
0

Я очень много работал над несколькими очень длинными видами, которые прилагаются к моим моделям через посредников «ViewModel». Моя модель находится в отдельном проекте.MVC 3 Скрытые поля

Все работает отлично, но некоторые из полей в представлении я хочу скрыть. Я использовал по большей части, что-то вроде этого:

 <td id="Left">@Html.LabelFor(x=>x.Id)</td> 
     <td id="Right">@Html.TextBoxFor(model => model.Id)</td> 

для всех полей до сих пор (есть несколько сот в каждом представлении

Оно не имеет смысл для меня, чтобы идти в них. и изменить многие из них HiddenFor, как я должен делать это во многих местах

Я хочу знать, если есть возможность поставить его на свойство модели представления, как:.

[Display(Name = "ID:")] 
    [HiddenInput(DisplayValue = false)] 
    public int Id { get; set; } 

, чтобы сразу скрыть как метку, так и входное текстовое поле, так что отображаются только отмеченные поля. Я думаю, что я смогу просто установить атрибут, чтобы сделать это, чтобы я ошибся.

Заранее благодарим за любую помощь.

+0

Это лучшая практика способ сделать это, хотя, что-нибудь еще, и он собирается получить некрасиво :) – mattytommo

+0

вы можете определить EditorTemplate работы с метаданными Атрибуты , И испускайте соответственно (может быть, не лучший способ, но он чистый и аккуратный). Взгляните на это: http://stackoverflow.com/questions/3828985/get-value-from-custom-attribute-in-editor-template – BigMike

+0

Похоже, что самое близкое, что я могу дойти до того, что хочу, - это прокомментировать TR на представлении. Спасибо за ваши ответы. # –

ответ

0

Нет, в вашем случае для этого нет выходного решения.

Там в ScaffoldColumnAttribute, который контролирует формирование входных и маркировать вместе, но его можно увидеть в действии только при использовании динамически генерируемые виды, используя EditorForModel. И эта техника полностью удаляет html, что не то же самое, что генерировать скрытые входы.

Вы могли бы попытаться управлять этим с помощью JQuery и attribute ends with selector хотя

<script> 
$(function() { 
    $('input[name$="Id"]').closest('tr').hide(); 
}); 
</script> 
+0

Проблема с этим вы должны создать одну строку для каждого поля, которое вы хотите скрыть. В худшем случае, я был готов сделать один атрибут рядом с местом, где поле было определено в viewmodel. Но спасибо за ответ в любом случае. –

+0

На самом деле вам понадобится один селектор для каждого поля и только в тех случаях, когда имя поля не попадает в какую-то общую логику. Например, для всех свойств, имена которых заканчиваются Id, пример кода будет работать без изменений – archil

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