是否有可能拆分在下拉列表中选择的全名并将其保存到2个单独的列中作为名和姓?

本文关键字:单独 2个 下拉列表 拆分 有可能 选择 全名 是否 保存 | 更新日期: 2023-09-27 18:15:17

我在实体框架代码第一种方法中有以下列:

public string LastName { get; set; }
public string FirstName { get; set; }

我将它们组合成一个全名:

 public string FullName
    {
        get { return LastName + " " + FirstName; }
    }

我甚至不知道如果它是可能的,但我怎么能产生一个setter为了从全名发送值到其他2列时,从下拉列表中选择它?

是否有可能拆分在下拉列表中选择的全名并将其保存到2个单独的列中作为名和姓?

假设你要做一个FullName。分割(' ');获取名称数组。当名字和姓氏都是一个单词时,一切都很好。那无名氏呢?LastName在哪里结束,FirstName在哪里开始?

可以使用不同的分隔符,比如逗号:John, Billy Doe。这样,执行fullname。split (',');将产生正确的Last Name和First Name

public string FullName
{
    get
    {
         return LastName + ", " + FirstName;
    }
    set
    {
         string[] names = value.Split(", ");
         LastName = names[0];
         FirstName = names[1];
    }
}
编辑:当然,需要对值进行一些验证,但是在Android应用程序上键入代码非常困难(就像我正在做的那样)。所以,除非你需要帮助,否则我把它留给你。

更简单的方法是在看到的第一个空格上进行分割,但如果有人的姓或名中有空格,则会中断。不完整的名字很少见,但姓氏中加空格的情况很常见,例如:《让-克劳德·凡·达姆》

 public String FullName {
     set {
         Int32 spaceIdx = value.IndexOf(" ");
         if( spaceIdx == -1 ) {
             this.FirstName = value;
             this.LastName  = "";
         }
         else
         {
             this.FirstName = value.Substring(0, spaceIdx);
             this.LastName  = value.Substring(spaceIdx + 1);
         }
     }
 }

更好的方法是在您的系统中唯一地标识名称,并从名称下拉列表中使用。假设这是ASP。NET MVC:

public class YourViewModel {
    public IEnumerable<SelectListItem> Names { get; set; }
    public Int32 SelectedNameByPersonId { get; set; }
}

在你的控制器中:

public IActionResult YourAction() {
    List<SelectListItem> names = db.People.Select( dbPerson => new SelectListItem() {
        Text = dbPerson.FirstName + " " + dbPerson.LastName,
        Value = dbPerson.Id.ToString()
    } ).ToList(); // ToList so the DB is only queried once
    return this.View( new YourViewModel() { Names = names } );
}
[HttpPost]
public IActionResult YourAction(YourViewModel model) {
    DBPerson dbPerson = db.People.GetPerson( model.SelectedNameByPersonId );
    // do stuff with person
}

在你的视图中(aspx语法):

<%= Html.DropDownFor( m => m.SelectNameByPersonId, this.Model.Names ) %>

我不太确定你在问什么,但我认为这可能会有所帮助(加上输入错误处理)。

public string LastName { get; set; }
public string FirstName { get; set; }
public string FullName
{
    get
    {
        return LastName + " " FirstName;
    }
    series
    {
        var nameParts = value.Split(' ');
        LastName = string.IsNullOrEmpty(nameParts[0]) ? string.Empty : nameParts[0];
        FirstName = string.IsNullOrEmpty(nameParts[1]) ? string.Empty : nameParts[1];
    }
}

我已经尝试了一些解决方法。请尝试一下,让我知道它是否有效。

    public string LastName { get; set; }
    public string FirstName { get; set; }
    [NotMapped] //This will make sure that entity framework will not map this to a new column
    public string FullName
    {
        get { return LastName + " " + FirstName; }
        // Here comes your desired setter method.
        set
        {
            string[] str = value.Split(' ');
            if (str.Length == 2)
            {
                FirstName = str[1];
                LastName = str[0];
            }
            else if (str.Length >= 0 && value.Length > 0)
            {
                LastName = str[0];
            }
            else
                throw new Exception("Invalid name");
        }
    }