C# 使用FluentAPI时如何控制结果的DisplayNameFor

C# 使用FluentAPI时如何控制结果的DisplayNameFor,c#,asp.net-mvc,razor,ef-fluent-api,C#,Asp.net Mvc,Razor,Ef Fluent Api,正在使用ASP.NET MVC 5应用程序。使用Fluent API定义模型映射。我想更改列名的外观,以便在执行DisplayFor时正确显示。例如,“操作名”,而不是“操作名” 目前,我的fluent api映射是 this.Property(t => t.ActionName).HasColumnName("ActionName"); 我想在Action和Name之间留一个空格,这样当列显示时,表列标题将显示“Action Name”,而不是“ActionName”。所以,我认为这会

正在使用ASP.NET MVC 5应用程序。使用Fluent API定义模型映射。我想更改列名的外观,以便在执行DisplayFor时正确显示。例如,“操作名”,而不是“操作名”

目前,我的fluent api映射是

this.Property(t => t.ActionName).HasColumnName("ActionName");
我想在Action和Name之间留一个空格,这样当列显示时,表列标题将显示“Action Name”,而不是“ActionName”。所以,我认为这会奏效

this.Property(t => t.ActionName).HasColumnName("Action Name");
但是,这会导致一个错误

{"Invalid column name 'Audit Name'."}
在我的HTML中,它的设置为

@Html.DisplayNameFor(model => model.ActionName)
我想DisplayNameFor会使用.HasColumnName设置,但显然不是

我可以直接输入HTML,但我正在努力做到“正确”,并理解它是如何工作的

有没有关于如何正确执行此操作的建议,以便DisplayNameFor在“Action Name”中显示结果

谢谢

我可以直接输入HTML,但我正在努力做到“正确”,并理解它是如何工作的

“正确”地执行操作意味着不使用实体类作为视图模型-它们有不同的用途

将实体用作ViewModels的一个很好的例子是用户帐户管理页面,例如,因为您需要两个
字符串
密码输入来输入“新密码”和“确认密码”,但您的实体类只有一个
字节[]
来输入密码哈希/摘要(我希望还有一个
salt
值)-通过这个示例,我希望您了解为什么不应该在web应用程序中使用
User
实体作为
UserEdit
页面的视图模型

我不知道你的应用程序做什么,你也没有发布数据库设计,只是为你的
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 );
}

只需在属性中添加一个
[Display(Name=“Action Name)]
属性,不要将实体类用作视图模型!这就是问题的原因,您将呈现(“视图级别”)问题与持久性级别(数据库)问题混为一谈关注点。@StephenMuecke谢谢!但是,这不是数据注释吗?有没有一种方法可以使用Fluent API来完成?或者混合使用数据注释和Fluent API是可以接受的做法?@Dai…谢谢。这听起来是一个很好的建议,分离更清晰!@WebDevGuy2,不是用于显示
-这是视图特定的,与y无关我们的数据库模型。也请参考答案,非常感谢!然后我将使用带有注释的ViewModel。