3

@HTMLEditorForモデルのデータ型が複数行のテキスト ボックスにより適切に表示されることを自動検出する基準は何ですか? MVC4、かみそり、および EF4.3 DatabaseFirst を使用します。CRUD 操作のためにコントローラ ウィザードのスキャフォールディング ページを使用しています。Edit.cshtml と Create.cshtml はどちらも使用しています

@Html.EditorFor(model => model.message)

テキストボックスを表示するには。スキャフォールディングされた Myemail.cs クラスを編集すると、次のような DataAnnotation を追加できます

 [DataType(DataType.MultilineText)]
 public string message { get; set; }

(1行と178pxの使用を開始するには非現実的なサイズではありますが<TextArea>)生成されました。ttテンプレートがモデルを生成するときにこれを自動化するべきではありませんか?または<TextArea>、フィールドが100 を超えるvarcharサイズなどはありますか?

乾杯ティム

4

1 に答える 1

3

私は私の答えの一部を持っていると思います。TextTemplatesTransformations についてさらに多くのことを読んで、Model1.tt を次のように変更しました。

System.ComponentModel.DataAnnotations;

また、EdmPropertyType を受け入れるように WriteProperty メソッドを変更しました。このコードは、指定された長さ > 60 または最大定義文字列に由来するすべての文字列に対して複数行の注釈を生成するようになりました。また、オーバーフローの防止に役立つことが期待される maxlength アノテーションも生成します。使用する場合は、以下のように既存の WriteProperty オーバーロードの両方を変更する必要があります。

void WriteProperty(CodeGenerationTools code, EdmProperty edmProperty)
{
    WriteProperty(Accessibility.ForProperty(edmProperty),
                  code.Escape(edmProperty.TypeUsage),
                  code.Escape(edmProperty),
                  code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
                  code.SpaceAfter(Accessibility.ForSetter(edmProperty)),edmProperty);
}



void WriteProperty(string accessibility, string type, string name, string getterAccessibility, string setterAccessibility,EdmProperty edmProperty = null)
{
    if (type =="string")    
    {
        int maxLength = 0;//66
        bool bres = (edmProperty != null
            && Int32.TryParse(edmProperty.TypeUsage.Facets["MaxLength"].Value.ToString(), out maxLength));
        if (maxLength > 60) // want to display as a TextArea in html 
        {
#> 
    [DataType(DataType.MultilineText)]
    [MaxLength(<#=maxLength#>)]
<#+
        }
        else
        if (maxLength < 61 && maxLength > 0) 
        {
#> 
    [MaxLength(<#=maxLength#>)]
<#+
        }
        else
        if(maxLength <=0) //varchar(max)
        {
#> 
    [DataType(DataType.MultilineText)]
<#+
        }

    }
#>
    <#=accessibility#> <#=type#> <#=name#> { <#=getterAccessibility#>get; <#=setterAccessibility#>set; }
<#+
}

<#+ 行と #> 行が行の先頭から始まることを確認してください。これは TT 構文の要件であると思われます。

ティム

于 2012-04-29T10:21:20.337 に答える