Как управлять строками в модели для MVC

Я создаю проект ASP.NET, и у меня есть CustomerModel, созданный Entity Framework (потому что сначала база данных). Я пытаюсь манипулировать полем 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(" "));

Прав ли я, когда манипулирую им вот так? Также это повлияет на что-либо, когда я, например, создаю данные, и значение переходит в переменную, а не в поле.

вам, вероятно, будет легче с string.Split

TheGeneral 29.07.2018 08:07

Я спрашиваю о разделении данных, которые я получаю от модели, не обязательно о том, как правильно разделить строку. Я просто привел это в качестве примера

Alfie McNarutoad 29.07.2018 08:11

Лучше всего сделать отдельные поля для firstName и lastName.

Asif Raza 29.07.2018 08:12

Наверное, мне следовало сказать это в своем ответе, но вы можете оставить все как есть. С культурной точки зрения нечувствительно пытаться принуждать людей использовать западный стандарт для своего имени. И когда вы пошли в одну сторону, это все равно, что пытаться превратить гамбургер в корову.

Jim Berg 29.07.2018 10:28

Жаль Билли Джин Кинг.

Gert Arnold 29.07.2018 12:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
243
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Можно пойти с string.Split().

Например:

string name = "Gabe Newel";
string FirstName = name.Split(" ")[0];
string LastName = name.Split(" ").Last();
Ответ принят как подходящий

Откуда вы знаете, что человек не вводит три или четыре имени? У многих людей есть отчество. Как бы вы поступили с этим логически? А как насчет людей с именами, в которых фамилия состоит из двух частей, например, Ван Пелт или Сент-Джеймс?

Если вы можете каким-то образом определить это, вы можете использовать логику в своем сеттере для свойства 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, поскольку он фактически вызывает установщики свойств при загрузке значений из базы данных. И он вызывает геттеры, чтобы получить значения для записи в базу данных. Вот почему вы должны использовать общедоступные свойства вместо общедоступных полей для моделей предметной области.

Мой пример намеренно многословен и быстр. Вы можете настроить его как хотите.

Для меня это только подтверждает, что это безнадежное усилие. А как насчет людей, имеющих два (или более) имени? Или китайские имена? Единственный шанс OP - получить части имени отдельно от человека (прямо или косвенно).

Gert Arnold 29.07.2018 19:59

Другие вопросы по теме