ASP.NET MVC5でリソースからのラベル取得

前回「ASP.NET MVC5を動かしてみる」でMVC5を動作させてみましたが、今回は各ラベルを作成したリソースファイルから取得して、表示してみます。

ラベルを表示するパターンとしては以下の2パターンをやってみます。
1.Viewファイルにリソース名を直接明記して表示。
2.Modelファイルに入力項目と紐付けて、入力項目のラベルとして表示。

リソースの追加

1.プロジェクト内のリソースファイルを作成したいフォルダを右クリック「追加(D)」→「新しい項目(W)…」を選択。

2.ファイル種別に「リソースファイル」を選択し、適当なファイル名を設定して「追加(A)」を選択

3.作成されたリソースファイルをデザイナで開き「アクセス修飾子(I)」を「Public」に設定して、リソース名と値を入力して保存

これでリソースファイルの作成は完了となります。

リソースファイル表示設定

1.「Views/web.config」のrazor設定値にリソースファイルの参照を追加。

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="MVCProject" />
        <!--追加開始-->
        <add namespace="MVCProject.Resources"/>
        <!--追加終了-->
      </namespaces>
    </pages>
  </system.web.webPages.razor>

2.Modelの入力項目に表示名のリソース情報を追記

using MVCProject.Resources;                       //追加
using System.ComponentModel.DataAnnotations;      //追加

namespace MVCProject.Models
{
    public class LoginModel
    {
        /// <summary>
        /// ログインID
        /// </summary>
        [Display(Name = "lblLoginId", ResourceType =typeof(RsrText))]  //追加
        public string Id { get; set; }
        /// <summary>
        /// ログインパスワード
        /// </summary> 
        [Display(Name = "lblPassword", ResourceType = typeof(RsrText))]  //追加
        public string Password { get; set; }
    }
}

3.ViewにResources表示部分を追加

@model MVCProject.Models.LoginModel
@{
	
    ViewBag.Title = RsrText.lblLogin; //resourceより取得
}

@using (Html.BeginForm("Index", "Login", FormMethod.Post))
{
	<h2>@RsrText.lblLogin@{ /*resourceより取得*/ }</h2>
	@Html.LabelFor(model => model.Id)@{ /*resourceより取得*/ }
	@Html.TextBoxFor(model => model.Id, new { size = 10, maxlength = 10 })<br />
	@Html.LabelFor(model => model.Password)@{ /*resourceより取得*/ }
	@Html.PasswordFor(model => model.Password, new { size = 10, maxlength = 10 })<br />
	<input type="submit" value="@RsrText.lblLogin@{ /*resourceより取得*/ }" />
	if (ViewData.Keys.Contains("POST"))
	{
		@:
@ViewData["POST"]
} }
@ViewData[“POST”]

} }

これでタイトルや、項目名、ボタン名がリソースから取得され表示されます。

実行

実行すると、以下のようにリソースから取得された名称が表示されているのがわかると思います。

次回は、これを多言語化対応させてみたいと思います。