2017-03-08 26 views
0

使用ASP.NET MVC 5應用程序。使用Fluent API來定義模型映射。我想更改列名的外觀,以便如果我執行DisplayFor,它會正常顯示。例如「Action Name」,而不是「ActionName」。如何在使用FluentAPI時控制DisplayNameFor結果

目前,我一口流利的API映射....

this.Property(t => t.ActionName).HasColumnName("ActionName"); 

我希望把行動和名稱之間的空間,因此,當列顯示了表列標題會說「操作名稱」,不是「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」?

謝謝!

+2

只需添加一個'[顯示(NAME =「操作名稱)]'屬性你的財產 –

+1

不要使用實體類作爲的ViewModels這是您事業問題,你在混合表示性(「視圖級」)con持久層(數據庫)問題。 – Dai

+0

@StephenMuecke謝謝!但是,這不是數據註釋嗎?有沒有辦法使用Fluent API來做到這一點?或者是否可以將數據註釋和Fluent API混合使用? – WebDevGuy2

回答

1

我可以直接鍵入HTML,但我試圖做到「正確」並理解它是如何工作的。

「正確」做事意味着不使用實體類作爲ViewModels - 它們有不同的用途。

舉例來說,將實體用作ViewModel是一個糟糕的主意的例子是用戶帳戶管理頁面,例如,因爲您需要爲「新密碼」和「確認密碼」輸入兩個string密碼輸入,但您的實體類將只有一個密碼散列/摘要byte[](和一個salt值,我希望) - 通過這個例子,我希望你明白爲什麼你不應該使用User實體作爲UserEdit的ViewModel頁面在您的網絡應用程序中。

我不知道你的應用程序做什麼,和你沒有張貼數據庫設計,但只需要創建一個不同的類型,請ViewModel

class SomePageViewModel { 

    [DisplayName("Action name")] 
    public String ActionName { get; set; } 
} 

,簡單的價值從你的實體對象複製到視圖模型,當您返回的觀點:

public ActionResult ControllerAction() { 

    // ... 

    SomePageViewModel viewModel = new SomePageViewModel(); 
    viewModel.ActionName = entityObject.ActionName; 

    return this.View(viewModel); 
} 
+0

非常感謝!然後我將使用帶註釋的ViewModel。 – WebDevGuy2

相關問題