编辑器模板

编辑器模板是重用 Razor 代码的好方法。你可以将编辑器模板定义为 Razor 部分视图,然后在其他视图中使用它们。

编辑器模板通常存在于 Views/Shared/EditorTemplates/文件夹中,尽管它们也可以保存到 Views/ControllerName/EditorTemplates/文件夹中。视图的名称通常是你要使用模板的对象的名称,例如 <type>.cshtml

这是 DateTime 的简单编辑器模板:

@model DateTime
<div>
   <span>
      @Html.TextBox("", Model.ToShortDateString(), new { data_date_picker="true" })
   </span>
</div>

将文件另存为 Views / Shared / EditorTemplate / DateTime.cshtml

然后,使用 EditorFor 在另一个视图中调用此模板代码:

@Html.EditorFor(m => m.CreatedDate)

还有一个 UIHint 属性来指定文件名:

public class UiHintExampleClass
{
    [UIHint("PhoneNumber")]
    public string Phone { get; set; }
}

Views / Shared / EditorTemplates / PhoneNumber.cshtml 中定义此电话号码模板。

也可以为自定义类型定义编辑器模板。

这是一个名为 SubModel 的自定义类型:

public class SubModel
{
    public Guid Id { get; set;} 
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Model
{
    public Guid Id { get; set; }
    public DateTime Created {get; set; }
    
    public SubModel SubModel{get; set; }
}

这是 SubModel 的 EditorTemplate:

@model SubModel
<div class="form-group">
    @Html.LabelFor(m => m.FirstName)
    @Html.TextBoxFor(m => m.FirstName)
</div>
<div class="form-group">
    @Html.LabelFor(m => m.LastName)
    @Html.TextBoxFor(m => m.LastName)
</div>

现在,模型视图简单地变为:

@model Model
@Html.EditorFor(m => m.CreatedDate)
@Html.EditorFor(m => m.SubModel, new { @Prefix = "New"}) 
@* the second argument is how you can pass viewdata to your editor template*@