我的意见中有以下两种类型的多行文本区
<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>
我想利用自定义编辑器模板,但是保持以不同方式指定属性的能力(例如,上述两行之间的行不同).
我可以为同一个字段声明和使用两种不同类型的模板吗?如果是这样,那么我应该如何声明模板,如何指定不同的模板来使用?
另外我如何声明不同的列和行.我可以使用列,行,还是应该在CSS中指定height和width,如width = 500px,height = 600px或400px?
解决方法
您可以覆盖
default editor template(〜/ 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,rows = "10",@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( "",htmlAttributes )
现在你可以:
@model Myviewmodel @Html.EditorFor(x => x.Text,id = "dialogText" }) @Html.EditorFor(x => x.Text,id = "dialogText" })
哦,不要忘记,ids在HTML中必须是唯一的,所以这个id =“dialogText”对于第二个textarea显然应该是不同的.