代码之家  ›  专栏  ›  技术社区  ›  Alfie McNarutoad

如何在MVC模型中操作字符串

  •  0
  • Alfie McNarutoad  · 技术社区  · 6 年前

    我正在创建一个ASP.NET项目,我有一个 CustomerModel 由实体框架生成(因为首先是数据库)。我想操纵 Name 所以我可以把它分成 FirstName LastName 分别是。这是我的模型:

    public partial class Customer
    {
        public int CustomerID { get; set; }
        public string Name { get; set; }
        ...
    
        // something like this?
        // I know this will cause an error though
        FirstName = Name.Substring(0, Name.IndexOf(" "));
    

    我这样操纵它是对的吗?例如,当我创建数据时,如果值转到variable而不是field,这会影响到任何事情吗。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Jim Berg    6 年前

    你怎么知道一个人不输入三个或四个名字?很多人都有中间名。你会如何处理这个逻辑?有名字的人,他们的姓是两部分,比如范佩尔特和圣詹姆斯,那他们呢?

    如果您能够以某种方式定义它,那么您可以在setter中为Name属性使用逻辑。设置好后,将其分割成各个部分。下面是一个简单的例子:

        public class NameExample
        {
            private string name;
            private string firstName;
            private string lastName;
    
            public string Name
            {
                get { return name;  }
                set
                {
                    if( value != name )
                    {
                        name = value;
                        if (string.IsNullOrEmpty(name)) return;
                        var names = name.Split(' ');
                        firstName = names[0];
                        if (names.Length > 1) lastName = names[1]; // Is our person Cher? ;-)
                    }
                }
            }
    
            public string FirstName
            {
                get
                {
                    return firstName;
                }
                set
                {
                    firstName = value;
                    name = firstName + (string.IsNullOrEmpty(lastName) ? "" : " " + lastName);
                }
            }
    
            public string LastName
            {
                get => lastName;
                set {
                    lastName = value;
                    name = firstName + (string.IsNullOrEmpty(lastName) ? "" : " " + lastName);
                }
            }
    

    您可以使用实体框架来实现这一点,因为当它从数据库加载值时,它实际上会调用属性的setter。它调用getter来获取要写入数据库的值。这就是为什么域模型必须使用公共属性而不是公共字段的原因。

    我的例子故意冗长而迅速。你想怎么调就怎么调。

        2
  •  -1
  •   LHK1337    6 年前

    你可以一起去 string.Split() .

    例如:

    string name = "Gabe Newel";
    string FirstName = name.Split(" ")[0];
    string LastName = name.Split(" ").Last();