0

テンプレートのスタイルを設定する方法について誰かアイデアを持っているかどうか疑問に思っています...たとえば、テキスト ボックスの MaxLength を変更したい場合、どうすればよいでしょうか。

私ができるようにしたいのは、スタイルとテンプレートを使用して WPF でできることのようなものです... WPF では、スタイルをテンプレートに渡し、それらのスタイルが適用される場所を選択できます...たとえば、ユーザーはコントロール (テンプレート) の幅を設定します。コントロール コード内で、その幅をテンプレート内の任意の要素に適用するか、まったく適用しないかを選択できます...

したがって、誰かが似たようなことを知っているかどうか疑問に思っていましたか?

4

3 に答える 3

2

同様の質問への回答をここに投稿しました。

一般的なスタイルが必要な場合は、必要なスタイルをサポートする基本の 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 リリースで一般的な方法が発明されることを願っています。

于 2009-10-30T18:37:25.207 に答える
0

ここでの解決策は、メタデータを使用することです。ここで、StringLengthデータ注釈検証属性を再利用できます。StringLength属性から最大長を読み取り、それをAdditionalValuesディクショナリに配置する新しいメタデータプロバイダーを作成します。メタデータプロバイダーは、DataAnnotationsModelMetadataProviderから継承する必要があります。次に、作成するテンプレートのDisplayTemplatesまたはEditorTemplatesで、文字列の最大長にアクセスできます。

于 2010-05-07T22:57:27.873 に答える
0

私が知る限り、これを行う最も簡単な方法は、以下に示すように、テキスト ボックスの HTML ID を作成することです。

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

そして、ページの最後に、次の JavaScript を記述します。

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

NB:- 私も MVC は嫌いです!!!

于 2012-07-13T22:55:01.077 に答える