编辑模板
显示模板可用于标准化对象的布局,现在让我们看看在编辑这些对象时我们如何为这些对象做同样的事情。就像显示模板一样,有两种方法可以为给定类型调用编辑器模板:
Html.EditorFor()
Html.EditorForModel()
编辑器模板与显示模板类似,需要存在于 Views / Shared / EditorTemplates 或 Views / ControllerName / EditorTemplates 中。对于此演示,我们将在 Shared 文件夹中创建它们。同样,视图的名称(默认情况下)应该是你要将其用作模板的对象的名称。
模型
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
public Roles Roles { get; set; }
public int RoleId { get; set; }
}
public class Roles
{
public int Id { get; set; }
public string Role { get; set; }
}
假设我们希望能够在多个视图中编辑数据库中的任何用户。我们将使用 ViewModel 来实现此目的。
视图模型
public class UserEditorViewModel
{
public User User { get; set; }
public IEnumerable<Roles> Roles { get; set; }
}
使用此 ViewModel ,我们将创建一个编辑器模板
查看/共享/ EditorTemplates / UserEditorViewModel.cshtml
@model TemplatesDemo.Models.UserEditorViewModel
<div class="form-group">
@Html.DisplayNameFor(m => m.User.Id)
@Html.EditorFor(m => m.User.Id)
</div>
<div class="form-group">
@Html.DisplayNameFor(m => m.User.Name)
@Html.EditorFor(m => m.User.Name)
</div>
<div class="form-group">
@Html.DisplayNameFor(m => m.User.DateOfBirth)
@Html.EditorFor(m => m.User.DateOfBirth)
</div>
<div class="form-group">
@Html.DisplayNameFor(m => m.User.Roles.Role)
@Html.DropDownListFor(m => m.User.RoleId, new SelectList(Model.Roles,"Id","Role"))
</div>
我们将获得所需的用户和可用角色列表,并将它们绑定到 Controller Action 中的 viewModel UserEditorViewModel 中,并将 viewModel 发送到视图。为简单起见,我从 Action 启动 viewModel
行动
public ActionResult Editor()
{
var viewModel = new UserEditorViewModel
{
User = new User
{
Id = 1,
Name = "Robert",
DateOfBirth = DateTime.Now,
RoleId = 1
},
Roles = new List<Roles>()
{
new Roles
{
Id = 1,
Role = "Admin"
},
new Roles
{
Id = 2,
Role = "Manager"
},
new Roles
{
Id = 3,
Role = "User"
}
}
};
return View(viewModel);
}
我们可以在任何我们希望的视图中使用创建的编辑器模板
视图
@model TemplatesDemo.Models.UserEditorViewModel
@using (Html.BeginForm("--Your Action--", "--Your Controller--"))
{
@Html.EditorForModel()
<input type="submit" value="Save" />
}