gpt4 book ai didi

entity-framework - 使用 Entity Framework (.edmx 模型)和 Razor View 创建 MVC3 下拉列表&& 将数据库记录插入多个表

转载 作者:行者123 更新时间:2023-12-03 06:07:19 26 4
gpt4 key购买 nike

在阅读了 100 篇有关如何使用 Razor View 在 MVC 3 中创建下拉列表的文章后,我找不到适合我的情况的文章。

情况:我最终试图创建一个 View 来将员工添加到数据库中。

这是我正在使用的 .EDMX 模型的图像(create() 将使用的表。):

enter image description here

目标:

  1. 创建一名员工(我有使用 StaffNotify 复选框的部分 View 制作的 Create.cshtml(强类型)){我在创建 View 的通知部分 View 中使用单独的 @model,不确定是否那是安全的??? @model ShadowVenue.Models.Employee & @model ShadowVenue.Models.StaffNotify)

  2. 为 StaffTypeId 创建一个下拉框(将从表“StaffType”(具有一对多关系)插入 [StaffTypeId] 值,但会在下拉列表中显示 [Type] 字符串值)

  3. 为 GenderId 创建一个下拉框(将从表“Genders”(具有一对多关系)中插入 [GenderId] 值,但会在下拉列表中显示 [Gender] 字符串值)

  4. 将记录插入数据库(我将员工通知放在一个单独的表中,并在 StaffId 主键上具有 1 对 1 的关系)

我似乎在 Controller 代码方面遇到了麻烦。

我不确定是否应该在 EDMX 模型中创建存储过程,或者提出一些查询或方法语法,不确定哪种是最好的方法。

这是我的第一个使用 Entity Framework 模型的大型 MVC3 应用程序。

(如果您需要知道任何导航属性名称以帮助解决问题,请告诉我,我会将其提供给您)

最佳答案

不要将数据库模型直接传递到您的 View 。您很幸运能够使用 MVC,因此可以使用 View 模型进行封装。

创建一个像这样的 View 模型类:

public class EmployeeAddViewModel
{
public Employee employee { get; set; }
public Dictionary<int, string> staffTypes { get; set; }
// really? a 1-to-many for genders
public Dictionary<int, string> genderTypes { get; set; }

public EmployeeAddViewModel() { }
public EmployeeAddViewModel(int id)
{
employee = someEntityContext.Employees
.Where(e => e.ID == id).SingleOrDefault();

// instantiate your dictionaries

foreach(var staffType in someEntityContext.StaffTypes)
{
staffTypes.Add(staffType.ID, staffType.Type);
}

// repeat similar loop for gender types
}
}

Controller :

[HttpGet]
public ActionResult Add()
{
return View(new EmployeeAddViewModel());
}

[HttpPost]
public ActionResult Add(EmployeeAddViewModel vm)
{
if(ModelState.IsValid)
{
Employee.Add(vm.Employee);
return View("Index"); // or wherever you go after successful add
}

return View(vm);
}

然后,最后在您的 View 中(您可以先使用 Visual Studio 搭建它的支架),将继承类型更改为 ShadowVenue.Models.EmployeeAddViewModel。另外,在下拉列表所在的位置,使用:

@Html.DropDownListFor(model => model.employee.staffTypeID,
new SelectList(model.staffTypes, "ID", "Type"))

性别下拉列表也类似

@Html.DropDownListFor(model => model.employee.genderID,
new SelectList(model.genderTypes, "ID", "Gender"))

根据评论更新

对于性别,如果您可以在上面建议的 View 模型中没有性别类型,您也可以这样做(不过,再想一想,也许我会在 View 模型中将这个服务器端生成为 IEnumerable)。因此,您可以使用 IEnumerable 来代替下面的 new SelectList...

@Html.DropDownListFor(model => model.employee.genderID,
new SelectList(new SelectList()
{
new { ID = 1, Gender = "Male" },
new { ID = 2, Gender = "Female" }
}, "ID", "Gender"))

最后,另一个选项是查找表。基本上,您保留与查找类型关联的键值对。类型的一个示例可能是性别,而另一个示例可能是状态,等等。我喜欢这样构造我的类型:

ID | LookupType | LookupKey | LookupValue | LookupDescription | Active
1 | Gender | 1 | Male | male gender | 1
2 | State | 50 | Hawaii | 50th state | 1
3 | Gender | 2 | Female | female gender | 1
4 | State | 49 | Alaska | 49th state | 1
5 | OrderType | 1 | Web | online order | 1

当一组数据不经常更改但仍需要不时枚举时,我喜欢使用这些表。

希望这有帮助!

关于entity-framework - 使用 Entity Framework (.edmx 模型)和 Razor View 创建 MVC3 下拉列表&& 将数据库记录插入多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com