Asp.net-Mvc

如何在 MVC3 中為多行文本框創建多個編輯器模板?

  • February 22, 2015

我的觀點中有以下兩種類型的多行文本區域:

<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上述兩者之間的不同)。

我可以為同一個欄位聲明和使用兩種不同的模板嗎?如果是這樣,那麼我應該如何聲明模板以及如何指定要使用的不同模板?

另外我如何聲明不同的列和行。我可以使用 cols,rows 還是應該在 or 中指定高度CSSwidth=500px, height=600px寬度400px

您可以覆蓋預設編輯器模板( ~/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 在 HTML 中必須是唯一的,所以這id = "dialogText"對於第二個 textarea 顯然應該是不同的。

引用自:https://stackoverflow.com/questions/10695983