2009-10-30 6 views
0

Просто интересно, есть ли у кого-нибудь идеи о том, как мы можем стилить шаблоны ... Как если бы я хотел изменить MaxLength текстового поля, как я могу это сделать.ASP.net MVC v2 - шаблоны для стилей

Что бы я хотел сделать, это что-то вроде того, что я могу сделать в WPF со стилями и шаблонами ... В WPF вы можете проходить стили к шаблонам, а затем выбирать, где применяются эти стили ... Для экземпляров, если пользователь задает ширину элемента управления (который является шаблоном), внутри кода управления я могу применить эту ширину к любому элементу, который я хочу в шаблоне, или ни к чему вообще ...

Следовательно, я было интересно, знает ли кто-нибудь о чем-то подобном?

ответ

2

Я отправил ответ на аналогичный вопрос here.

Если вы хотите общие стили, вы можете получить модели пользовательских шаблонов от базового класса TemplateViewModel который будет поддерживать ваши необходимые стили:

public interface ITextSpecifier 
{ 
    int? Size { get; } 
    bool AutoGrow { get; } 
} 

public class TemplateViewModel<T> where T: class 
{ 
    public IDictionary<string, string> Attributes { get; } 
    public ITextSpecifier TextStyle { get; private set; } 
    public IColorSpecifier ColorStyle { get; } 
    public T TextStyle(int size, bool autogrow) 
    { 
    TextStyle = new TextSpecifier(size, autogrow); 
    return this; 
    } 
} 

public class TextBoxViewModel: TemplateViewModel<TextBoxViewModel> 
{ 
} 

<%= Html.EditorFor(x => new TextBoxViewModel(Model.StringData).TextStyle(10, false)) %> 

В шаблоне:

<!-- template page derived from typed control for TextBoxViewModel --> 
<input type='text' <%= Model.TextStyle.Size != null 
    ? "size='" + Model.TextStyle.Size + "'" : "" %> ... /> 

Это немного работы, поэтому я надеюсь, что они придумают какой-то общий метод в выпуске MVC v2.

+0

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

+0

Это поможет решить проблему, над которой я работаю. Это новая вещь, на которую вы надеялись попасть в v2 или v3? T – kenny

+0

Ну, я все еще использую v1 ;-) – queen3

0

Решение здесь - использовать метаданные! Здесь вы можете повторно использовать атрибут проверки аннотации данных StringLength. Создайте новый поставщик метаданных, который считывает максимальную длину из атрибута StringLength и помещает его в словарь AdditionalValues. Поставщик метаданных должен наследовать от DataAnnotationsModelMetadataProvider. А затем в шаблоне, который вы создаете, в DisplayTemplates или EditorTemplates вы можете получить максимальную длину строки.

0

Самый простой способ сделать это, насколько я знаю, чтобы создать HTML-идентификатор для текстового поля, как показано ниже:

@Html.EditorFor(model => model.Description, null, "Description", null) 

И в конце страницы, написать следующий JavaScript

<script type="text/javascript"> 
     $(function() { $("#Description").css("width","450"); });  
</script> 

NB: - Даже я ненавижу MVC !!!

+0

почему вы ненавидите шаблон дизайна? или вы один из людей, которые ссылаются на IE как на «Интернет» и на ASP.NET MVC как «mvc»? –

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