使用ASP.NET MVC 5应用程序。使用Fluent API定义模型映射。我想更改列名称外观,以便如果我执行DisplayFor它会正确显示。例如,"操作名称",而不是" ActionName"。
目前,我的流畅api映射是....
this.Property(t => t.ActionName).HasColumnName("ActionName");
我想在Action和Name之间放置一个空格,以便当列显示时,表列标题将显示" Action Name",not" ActionName"。所以,我认为这会起作用....
this.Property(t => t.ActionName).HasColumnName("Action Name");
但是,这会导致错误......
{"Invalid column name 'Audit Name'."}
在我的HTML中,它设置为...
@Html.DisplayNameFor(model => model.ActionName)
我以为DisplayNameFor会使用.HasColumnName设置,但显然不是。
我可以直接输入HTML,但我正在努力做到这一点"正确"并了解这是如何工作的。
有关如何正确执行此操作的任何建议,以便DisplayNameFor导致"操作名称"?
谢谢!
答案 0 :(得分:1)
我可以直接输入HTML,但我正在努力做到这一点"正确"并了解其工作原理。
正确地做事#34;"意味着不使用实体类作为ViewModels - 它们用于不同的目的。
为什么将实体用作ViewModels是个坏主意的一个很好的例子是用户帐户管理页面,例如,因为你需要两个string
密码输入用于"新密码&# 34;和#34;确认密码",但您的实体类只有一个byte[]
用于密码哈希/摘要(以及salt
值,我希望) - 所以通过这个例子,我希望你明白为什么你不应该将User
实体用作你网页应用程序中UserEdit
页面的ViewModel。
我不知道你的应用程序做了什么,但你还没有发布数据库设计,只是为你的ViewModel
创建了一个不同的类型:
class SomePageViewModel {
[DisplayName("Action name")]
public String ActionName { get; set; }
}
当您返回视图时,只需将实体对象中的值复制到viewmodel中:
public ActionResult ControllerAction() {
// ...
SomePageViewModel viewModel = new SomePageViewModel();
viewModel.ActionName = entityObject.ActionName;
return this.View( viewModel );
}