9

ビューには、次の2種類の複数行のテキスト領域があります。

<textarea cols="100" rows="15" class="full-width" id="dialogText" 
          name="Text">@Model.Text</textarea>

<textarea cols="100" rows="10" class="full-width" id="dialogText" 
          name="Text">@Model.Text</textarea> 

カスタムエディタテンプレートを利用したいのですが、属性を異なる方法で指定する機能を維持します(たとえば、rows上記の2つで異なる)。

同じフィールドに2種類のテンプレートを宣言して使用することはできますか?もしそうなら、どのようにテンプレートを宣言する必要があり、どのように使用するさまざまなテンプレートを指定するのですか?

また、異なる列と行をどのように宣言できますか。cols、rowsを使用できますか、またはCSSなどで高さと幅を指定する必要がありますwidth=500px, height=600px400px

4

2 に答える 2

16

デフォルトのエディターテンプレート~/Views/Shared/EditorTemplates/MultilineText.cshtml)をオーバーライドできます。

@Html.TextArea(
    "", 
    ViewData.TemplateInfo.FormattedModelValue.ToString(),
    ViewData
)

次に、ビューモデルを定義したと仮定します。

public class MyViewModel
{
    [DataType(DataType.MultilineText)]
    public string Text { get; set; }
}

メインビュー内でこれを行うことができます:

@model MyViewModel

@Html.EditorFor(x => x.Text, new { cols = "100", rows = "15", id = "dialogText", @class = "full-width" })
@Html.EditorFor(x => x.Text, new { cols = "100", rows = "10", id = "dialogText", @class = "full-width" })

これにより、期待される出力がレンダリングされます。

<textarea class="full-width" cols="100" id="dialogText" name="Text" rows="15">
    hello world
</textarea>

<textarea class="full-width" cols="100" id="dialogText" name="Text" rows="10">
    hello world
</textarea>

また、次のようにすべてのEditorFor呼び出しで@class属性を指定する必要がないように、エディターテンプレートを拡張することもできます。

@{
    var htmlAttributes = ViewData;
    htmlAttributes["class"] = "full-width";

}
@Html.TextArea(
    "", 
    ViewData.TemplateInfo.FormattedModelValue.ToString(),
    htmlAttributes
) 

そして今、あなたはできる:

@model MyViewModel
@Html.EditorFor(x => x.Text, new { cols = "100", rows = "15", id = "dialogText" })
@Html.EditorFor(x => x.Text, new { cols = "100", rows = "10", id = "dialogText" })

id = "dialogText"ああ、IDはHTMLで一意でなければならないので、これは2番目のテキストエリアでは明らかに異なるはずであることを忘れないでください。

于 2012-05-22T06:13:25.037 に答える
3

MultiLine1.cshtmlエディターテンプレートを作成MultiLine2.cshtmlし、ビューモデルUIHintで、その特定のプロパティに使用するエディターテンプレートを指定するために使用できます。ただし、1つのプロパティに指定できるテンプレートは1つだけです。ただし、同じタイプの異なるプロパティでは、異なるテンプレートを使用できます。

于 2012-05-22T06:04:40.127 に答える