模型失去了getter的私有字段值

时间:2017-03-17 11:39:45

标签: c# asp.net-mvc model getter-setter

我正在使用ASP.Net MVC,并且有一个使用getter和setter格式化电话号码的模型。

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

项目正在使用实体框架和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; }
}

1 个答案:

答案 0 :(得分:0)

您遇到的问题是,如果您的输入值没有空格,您实际上从未存储过它。只需在末尾添加else

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

我还建议您使用_variableName作为私有变量来遵循C#最佳做法:

private string _telephoneNumber;
private string _faxNumber;