2

非常に単純な要件があります。MVC4プロジェクトでは、@ HTML.labelForフィールドを使用してフォームを表示する必要があります。このフィールドは、viewmodelクラスのプロパティの属性フィールドから値を取得します。従業員コードなどの単純なプロパティでは正常に機能しますが、個人クラスのカスタムデータ型では機能しません。

namespace MvcApplication1.Models
{
  public class EmployeeViewModel
  {
    [Display(Name = "Employee Code:")]
    public string EmpCode { get; set; }

    public person PersonInfo { get; set; }

    [Display(Name = "Department Name:")]    
    public string Department { get; set; }
  }
}

namespace MvcApplication1.Models
{
  public class Person
  {
    [Display(Name = "First Name:")]
    public string FName { get; set; }

    [Display(Name = "Last Name:")]
    public string LName { get; set; }
  }
}

@Html.LabelFor(m => Model.EmpCode)ラベルを従業員コードとして正しく表示します。

@Html.LabelFor(m => Model.PersonInfo.FName)ラベルがFNameとして誤って表示されます:

@Html.LabelFor(m => Model.PersonInfo.LName)ラベルがLNameとして誤って表示されます:

@Html.LabelFor(m => Model.PersonInfo.Department)ラベルを部門名として正しく表示します:

オブジェクトタイプのプロパティの属性情報を表示する方法を理解しようとしています。拡張メソッドを使用していますか?

4

2 に答える 2

6

間違った属性を使用しています。以下の簡単な例が機能します。

コントローラ:

public ActionResult Index()
{
    var model = new ParentModel {
        Name = "Parent name", 
        Child = new ChildModel {
            Name = "Child name"
        }
    };

    return View(model);
}

モデル:

public class ParentModel
    {
        [DisplayName("Parent name:")]
        public string Name { get; set; }
        public ChildModel Child { get; set; }
    }

    public class ChildModel
    {
        [DisplayName("Child name:")]
        public string Name { get; set; }
    }

意見:

@model ParentModel

@Html.LabelFor(model => model.Name)
@Html.LabelFor(model => model.Child.Name)
于 2012-12-21T11:27:10.837 に答える
0

あなたの人物属性はnullですか?

デフォルトのコンストラクターを追加してみて、追加してEmployeeViewModelください

PersonInfo = new Person();
于 2012-12-20T23:26:31.813 に答える