Sam*_*tar 9 asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-2
我的观点中有以下两种类型的多行textareas:
<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>
Run Code Online (Sandbox Code Playgroud)
我想利用自定义编辑器模板,但保持以不同方式指定属性的能力(例如,上述rows
两者之间的不同).
我可以为同一个字段声明和使用两种不同的模板吗?如果是,那么我应该如何声明模板以及如何指定要使用的不同模板?
另外,我如何声明不同的列和行.我可以使用cols,rows或者我应该指定高度和宽度,CSS
例如width=500px, height=600px
或400px
?
Dar*_*rov 16
您可以覆盖默认编辑器模板(~/Views/Shared/EditorTemplates/MultilineText.cshtml
):
@Html.TextArea(
"",
ViewData.TemplateInfo.FormattedModelValue.ToString(),
ViewData
)
Run Code Online (Sandbox Code Playgroud)
然后假设您已定义视图模型:
public class MyViewModel
{
[DataType(DataType.MultilineText)]
public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在主视图中你可以这样做:
@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" })
Run Code Online (Sandbox Code Playgroud)
这将呈现预期的输出:
<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>
Run Code Online (Sandbox Code Playgroud)
您还可以增强编辑器模板,这样就不需要在每个EditorFor调用中指定@class属性,如下所示:
@{
var htmlAttributes = ViewData;
htmlAttributes["class"] = "full-width";
}
@Html.TextArea(
"",
ViewData.TemplateInfo.FormattedModelValue.ToString(),
htmlAttributes
)
Run Code Online (Sandbox Code Playgroud)
现在你可以:
@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" })
Run Code Online (Sandbox Code Playgroud)
哦,不要忘记在HTML中必须是唯一的ID,因此id = "dialogText"
对于第二个textarea来说,这显然应该是不同的.
归档时间: |
|
查看次数: |
4827 次 |
最近记录: |