模型 - 基于其他字段中的值的字段

时间:2013-07-20 19:11:05

标签: asp.net-mvc entity-framework ef-code-first

我刚刚开始学习MVC。

我创建了一个简单的模型:

public class StaffMember
{
    public Guid StaffMemberId { get; set; }
    public string Forename { get; set; }
    public string Surname { get; set; }
    public string Team { get; set; }
    public virtual ICollection<Observation> Observations { get; set; }
}

现在我已决定要在观察记录的创建页面上包含所有StaffMembers的下拉列表。我设法使用以下代码执行此操作:

@Html.DropDownListFor(o => o.StaffMemberId,
                          new SelectList(Model.StaffMembers,
                                         "StaffMemberId", 
                                         "Forename", 
                                         Model.StaffMemberId), 
                          "-- Select Staff Member --")

这很有效,但是,您会注意到我只能包含一个字段"Forename"

我希望下拉列表显示工作人员的全名。我尝试手动连接字段,即"Forename" + " " + "Surname",但是没有关于没有“Forename”+“”+“Surname”等字段的抛出和异常。

我的问题是 - 是否可以在我的模型中添加一些仅基于两个现有属性的值的属性。类似的东西:

public class StaffMember
{
    private string _fullName;

    public Guid StaffMemberId { get; set; }
    public string Forename { get; set; }
    public string Surname { get; set; }
    public string Team { get; set; }
    public virtual ICollection<Observation> Observations { get; set; }

    public string FullName
    {
        get
        {
            return _fullName;
        }
        set
        {
            value = this.Forename + " " + this.Surname;
            _fullName = value;
        }
    }
}

我尝试了上述操作,但在填充数据库时(我首先使用实体​​模型代码),该字段的值始终为null,即使该字段在调试时显示正确的值。

我正在使用以下内容自动使用一些测试数据填充数据库:

var staff = new List<StaffMember>
{
    new StaffMember
    {
        Forename = "Bob",
        Surname = "Hope",
        StaffMemberId = Guid.NewGuid(),
        Team = "Test" 
    },
    new StaffMember
    {
        Forename = "Stan",
        Surname = "Laurel",
        StaffMemberId = Guid.NewGuid(),
        Team = "Test"
    }
};

staff.ForEach(s => context.StaffMembers.Add(s));
context.SaveChanges();

任何指针在这里都非常有用,特别是如果我以完全错误的方式接近它的话!

1 个答案:

答案 0 :(得分:2)

是的,你真的很接近FullName财产。

public class StaffMember
{
    public string FullName
    {
        get
        {
            return this.Forename + " " + this.Surname;
        }
    }
}

不需要私有_fullName,因为您只需要获取Forename和Surname的值。而且您不需要set,因为您不会使用FullName

将值设置回此模型