首页 > 解决方案 > 如何在 MVC 模型中操作字符串

问题描述

我正在创建一个 ASP.NET 项目,并且我有一个CustomerModel由 Entity Framework 生成的项目(因为首先是数据库)。我正在尝试操作一个Name字段,以便我可以将它分别分成一个FirstNameLastName。这是我的模型:

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(" "));

当我这样操作它时我是正确的吗?例如,当我创建数据并且值转到变量而不是字段时,这也会影响任何事情。

标签: c#entity-framework

解决方案


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

如果你能以某种方式定义它,你可以在你的设置器中为 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);
            }
        }

您可以使用 Entity Framework 执行此操作,因为它在从数据库加载值时实际上会调用属性的设置器。它调用 getter 来获取要写入数据库的值。这就是为什么您必须为域模型使用公共属性而不是公共字段的原因。

我的例子故意冗长而快速。您可以根据需要对其进行微调。


推荐阅读