ASP.net MVC v2 - 样式模板

时间:2009-10-30 01:56:48

标签: asp.net-mvc templates styling

只是想知道是否有人对我们如何设置模板样式有任何想法...就像我想要更改文本框的MaxLength一样,我该怎么做呢。

我希望能够做的就像我在WPF中可以使用样式和模板做的事情......在WPF中,您可以将样式传递给模板,然后选择应用这些样式的位置...对于如果用户在控件(模板)上设置宽度,则在控件代码中我可以选择将该宽度应用于模板中我想要的任何元素,或者根本不应用...

因此我想知道是否有人知道类似的东西?

3 个答案:

答案 0 :(得分: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发布中发明一些常用方法。

答案 1 :(得分:0)

这里的解决方案是使用元数据!您可以在此处重用StringLength数据注释验证属性。创建一个新的元数据提供程序,该提供程序读取StringLength属性的最大长度并将其放入AdditionalValues字典中。您的元数据提供程序应继承自DataAnnotationsModelMetadataProvider。然后在您创建的模板中,在DisplayTemplates或EditorTemplates中,您可以访问字符串的最大长度。

答案 2 :(得分:0)

据我所知,最简单的方法是为文本框创建HTML ID,如下所示:

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

在页面的最后,写下以下的javascript

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

注意: - 即使我讨厌MVC !!!