【问题标题】:Model losing private field value for getter模型丢失 getter 的私有字段值
【发布时间】:2017-03-17 11:39:45
【问题描述】:

我正在使用 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; }
}

【问题讨论】:

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


    【解决方案1】:

    您遇到的问题是,如果您的输入值没有空格,那么您永远不会实际存储它。只需在末尾添加else

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

    我还建议您遵循 C# 最佳实践,将 _variableName 用于私有变量:

    private string _telephoneNumber;
    private string _faxNumber;
    

    【讨论】:

    • 谢谢,这确实解决了问题。不错的地方。从现在开始我也将使用下划线。
    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多