我有一张存储人物的表。这些属性是 FirstName
、LastName
和 PersonID
。我已经添加了属性
public string NameFull { get { return FirstName + " " + LastName; } }
而且我能够将输出显示为串联名称。
但是,当用户选择姓名时,我想将其存储为 PersonID。
目前,我将此作为我的 linq Where 语句:
var personID= db.Persons
.Where(h => Names == model.Person.NameFull)
.Select(h => h.PersonID);
var idToSave = personID.AsEnumerable().FirstOrDefault().Trim().ToString();
在 Controller 中:
SelectList names = new SelectList(db.Person.ToArray(), "PersonID", "NameFull");
ViewBag.Names = names;
谁能给我指出正确的方向?
最佳答案
如果我的理解正确,那么您希望在下拉列表中显示名字和姓氏,并且当用户选择姓名组合时,必须改用该人的 ID?如果是这样,那么下面的代码是基于我上面的假设。
我已经创建了必要的类,就像我应该做的那样。如果我遗漏了什么,请原谅,下面的代码没有经过测试。
您的 Person
类将如下所示:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
}
我已经很久没有使用 Entity Framework
了,不确定它是否会提示 FullName
不是 persons 表中的列名。
创建一个您将传递到 View 中的 PersonViewModel
类。
public class PersonViewModel
{
public PersonViewModel()
{
Persons = new List<Person>();
}
public int PersonId { get; set; }
public List<Person> Persons { get; set; }
}
在你的 Controller 中你会有这样的东西:
public ActionResult Create()
{
PersonViewModel model = new PersonViewModel();
// Get a list of all the people
// I can't remember how to use Entity Framework to get a list of all the people,
// it's something like the code below
model.Persons = db.Persons;
return View(model);
}
您的帖子操作方法:
[HttpPost]
public ActionResult Create(PersonViewModel model)
{
// Do whatever you need to do
}
在您看来,代码将如下所示:
@Html.DropDownListFor(
x => x.PersonId,
new SelectList(Model.Persons, "Id", "FullName", Model.PersonId),
"-- Select --"
)
上面的代码应该在下拉列表的“文本”部分显示名字和姓氏,并在下拉列表的值中显示人员的 ID。
希望你来对了:)
关于c# - ASP.NET MVC 连接名称并映射到 ID#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31038378/