模型丢失 getter 的私有字段值

Model losing private field value for getter

我正在使用 ASP.Net MVC,并且有一个模型使用 getters 和设置器来格式化电话号码。

出于某种原因,getter 总是 returns null,调试时检查显示私有成员确实为 null。尽管在填充模型时私人成员已成功设置为格式化数字。

该项目正在使用 entity framework 和一个设置一些测试模型属性的 dbInitializer(该项目仍在开发中),我想这可能会导致问题,但是数据库仍在填充格式化的数.

下面是我的模型代码,谁能看出我哪里出错了?

public class ContactDetails
{
    private string telephoneNumber;
    private string faxNumber;

    [DisplayName("Telephone number")]
    public string TelephoneNumber
    {
        get
        {
            return this.telephoneNumber;
        }
        set
        {
            // Format the telephone number
            // If not already formatted (doesn't have spaces)
            if (value.IndexOf(" ") < 0)
            {
                // Format a mobile number
                if (value.StartsWith("07"))
                {
                    this.telephoneNumber = value.Substring(0, 5) + " " + value.Substring(5, 3) + " " + value.Substring(8, 3);
                } else
                {
                    // Format a landline
                    this.telephoneNumber = value.Substring(0, 4) + " " + value.Substring(4, 3) + " " + value.Substring(7, 3);
                }                    
            }
        }
    }
    [DisplayName("Fax number")]
    public string FaxNumber { get; set; }
    [DisplayName("Email address")]
    public string EmailAddress { get; set; }
}

你遇到的问题是,如果你的输入值没有空格,你就永远不会真正存储它。只需在末尾添加一个else

if (value.IndexOf(" ") < 0)
{
    //snip                
}
else
{
    this.telephoneNumber = value;
}

我还建议您通过对私有变量使用 _variableName 来遵循 C# 最佳实践:

private string _telephoneNumber;
private string _faxNumber;