2017-03-08 6 views
0

ASP.NET MVC 5アプリケーションでの作業。 Fluent APIを使用してモデルマップを定義する列名の外観を変更して、DisplayForを行うと正しく表示されるようにしたい。たとえば、「ActionName」ではなく「Action Name」などです。FluentAPIを使用する場合のDisplayNameFor結果の制御方法

現在、私の流暢APIマッピングがある....

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

私は列がテーブルの列ヘッダーを示していたときに「アクション名」を言うだろうように、アクションと名の間にスペースを入れたいです、 "ActionName"ではありません。だから、私はHTMLで

{"Invalid column name 'Audit Name'."} 

...これはエラーになり、

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

....これが働くだろうと思った。しかし、それは

@Html.DisplayNameFor(model => model.ActionName) 
...などの設定です

私はDisplayNameForが.HasColumnName設定を使用すると思っていましたが、明らかにそうではありません。

私はただHTMLを直接入力することができますが、私はそれを「正しく」行い、これがどのように動作するかを理解しようとしています。

DisplayNameForの結果が「アクション名」になるように、これを正しく行う方法に関する提案はありますか?

ありがとうございます!

+2

をちょうどあなたの財産に –

+1

がのviewmodelsとしてエンティティクラスを使用しないでください。これはあなたの原因である '[表示(名=「アクション名)]'属性を追加問題は、プレゼンテーション(「ビューレベル」)のコンシューマをミックスしている持続性レベル(データベース)の心配を伴うcerns。 – Dai

+0

@StephenMueckeありがとう!しかし、そのデータ注釈ではありませんか? Fluent APIを使用してそれを行う方法はありますか?あるいは、データアノテーションとFluent APIの両方を混在させることは許容される方法ですか? – WebDevGuy2

答えて

1

私はHTMLで直接入力することができますが、私はそれを「正しく」行い、これがどのように機能するかを理解しようとしています。

「正しく」行うことは、エンティティクラスをViewModelsとして使用しないことを意味します。これらはさまざまな目的を果たします。

エンティティをViewModelsとして使用することは、「新しいパスワード」と「パスワードの確認」に対して2つのstringのパスワード入力が必要になるなどの理由で、ユーザーアカウント管理ページですが、クラスにはパスワードハッシュ/ダイジェストのbyte[](そしてsaltの値もあります。私はとなります) - この例ではUserEditのViewModelとしてUserエンティティを使用しないでくださいあなたのウェブアプリケーション内のページ。

私はあなたのアプリケーションが何をするか分からない、とあなたは、データベース設計を投稿していないが、ちょうどあなたの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); 
} 
+0

ありがとう!注釈付きのViewModelを使用します。 – WebDevGuy2

関連する問題