Asp.Net MVC4.0公式チュートリアルの拡張1つ--モデルのプロパティに中国語の表示名を追加

3639 ワード

公式の教程はすでに翻訳が終わって、この基礎の上で、更にいくつか開拓をして、目標は本土化の調整をして、国内のプロジェクトの開発の現状に適して、例えば、英語の国家にとって、ライブラリの表のフィールド名、模型の属性名、ページの表示名はすべて同じで、まったく区別する必要はありませんて、国内にとって、表示するリストのページの列のタイトルの欄あるいは詳しいページのフィールドの説明は中国語で、ライブラリテーブルに格納されているフィールドとモデルのプロパティは英語です.今のところ明確な計画はなく、どこまで書くか、出所も雑で、英語の資料を調べたり、前人が書いた文章を読んだり、自分で模索したりして、先に書いて、最終的にソートを整理したりしています.
本稿では、上述したモデル属性に中国語表示名を追加する方法について説明します.公式チュートリアルの例では、MVCはすでに漢化されていることがわかりますが、漢化は完全ではありません.例えば、自動生成されたボタンやリンクの多くは英語です.リストページでは、列タイトルバーが英語名で、詳細ページのフィールド説明も英語で、このような展示を最終効果として渡すことは明らかではありません.
まず、公式チュートリアルで生成されたMovieのIndexビューを見て、Views/Movie/Indexを開きます.cshtmlファイル、足場が自動的に生成するリストページテーブルのヘッダーは以下の通りです.
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Genra)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Price)
        </th>
         <th>
            @Html.DisplayNameFor(model => model.Rating)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Date)
        </th>
        <th></th>
    </tr>

漢化を行うには、@Htmlなどのビューを直接修正するのが最も愚かです.DisplayName For(model=>model.Name)をムービー名に変更します.このようにすれば漢化効果を実現できるが、非常に煩雑で、時間と労力がかかり、間違いやすい.列が多い場合は、列対応のずれが発生しやすい.プロパティの中国語表示名を変更するには、CRUDの複数のビューで手動で調整する必要があります.作業量は明らかです.また、前述した「ドライ」(DRY)の原則にも反する.
前のチュートリアルでモデルに検証プロパティを追加すると、モデルクラスで中国語表示名を一度だけ定義し、各ビューで自動的に適用できるかどうかヒントになります.実際、MVCはすでにこの方面の処理をしています.以上のコードから分かるように、足場メカニズムはビューコードには死んでおらず、直接列タイトルにName/Genraなどと書くのではなく、HtmlアシスタントクラスのDisplayName Forメソッドを呼び出し、モデル属性に入り、表示名を取得する.モデルクラスで属性に中国語表示名属性を追加するだけでいいです.具体的にはModels/Moviesを開きます.cs、Displayプロパティを追加します.コードは以下の通りです.
    public class Movie
    {
        public int ID { get; set; }       
        [Display(Name="  ")]
        public string Name { get; set; }
        [Display(Name = "  ")]
        public string Genra { get; set; }
        [Display(Name = "  ")]
        public decimal Price { get; set; }    
        [Display(Name = "    ")]
        public DateTime Date { get; set; }  
        [Display(Name = "  ")]
        public string Rating { get; set; }
    }

モデル属性にDisplayを追加し、表示する中国語名のパラメータNameを設定します.変更後にプロジェクトの生成操作を実行し、実行すると、リストページと削除変更ページが自動的に有効になり、中国語フィールド名が表示されます.
Displayプロパティの公式ヘルプを表示するには、名前空間:System.ComponentModel.DataAnnotations
DisplayAttributeクラス:エンティティ区分クラスのタイプとメンバーにローカライズ可能な文字列を指定できる汎用プロパティを提供します.
上記で使用したNameパラメータは、これだけではありません.最初のAutoGenerateFieldのように、ユーザーインタフェースを自動的に生成してこのフィールドを表示するかどうかを示す値を取得または設定することを公式に説明しています.
実際のビジネス開発では、バックグラウンド処理に使用されるフィールドを非表示にしたり、ユーザーに表示したりする必要はありません.そこで、次のように試行的に追加します.
[Display]public string Genra{get;set;}
結果……いずれにしても、このパラメータは有効にならないことが判明した…パラメータAutoGenerateFieldをfalseのGenraに設定し、コンパイルも実行もエラーや警告は報告されていないが、実行結果は、常にビューで自動的に生成される…公式の説明を調べた上で、キーワードに基づいてネット上の結果を検索したが、合理的な解釈は見つからなかった.また次のDescriptionパラメータを試してみましたが、同じように効果がありませんでした.そこで,System.ComponentModel.DataAnnotationsネーミングスペースにおけるName以外のこれらのパラメータは,WinFormでのみ有効であるのに対し,ASP.NET MVC下、无効……私の推测が正しいかどうか、あるいは本当の原因が何なのか、あるいは私の使い方がどこに间违っているのか、関系者にお知らせください.