是否有可能拆分在下拉列表中选择的全名并将其保存到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列时,从下拉列表中选择它?
假设你要做一个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");
}
}