- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读了 100 篇有关如何使用 Razor View 在 MVC 3 中创建下拉列表的文章后,我找不到适合我的情况的文章。
情况:我最终试图创建一个 View 来将员工添加到数据库中。
这是我正在使用的 .EDMX 模型的图像(create() 将使用的表。):
目标:
创建一名员工(我有使用 StaffNotify 复选框的部分 View 制作的 Create.cshtml(强类型)){我在创建 View 的通知部分 View 中使用单独的 @model,不确定是否那是安全的??? @model ShadowVenue.Models.Employee & @model ShadowVenue.Models.StaffNotify)
为 StaffTypeId 创建一个下拉框(将从表“StaffType”(具有一对多关系)插入 [StaffTypeId] 值,但会在下拉列表中显示 [Type] 字符串值)
为 GenderId 创建一个下拉框(将从表“Genders”(具有一对多关系)中插入 [GenderId] 值,但会在下拉列表中显示 [Gender] 字符串值)
将记录插入数据库(我将员工通知放在一个单独的表中,并在 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/
我的公司正在尝试制定一些关于使用哪种技术来构建应用程序的指南。在做我的研究时,我感到很困惑。 似乎有 3 种 ASP.NET 技术。 MVC Razor Razor 页 MVC 对我来说相当清楚,因为
我正在尝试使用 Razor(来自预览版)将 MVC 项目升级到 Beta,现在我遇到了 Razor 没有进入它用来访问的登录 View 的奇怪现象(当有人要求执行需要授权的操作时)。 我的网络配置有
我想在 Razor 页面中包含一个类型化的模型子页面。我知道 SS 与 MVC Razor 不同。这样做的方式可能有些不同。 到目前为止,这就是我想出来的(看起来很丑,知道......): /
我在 Views 的同一个子文件夹中有两个 cshtml 文件。其中一个模板旨在包含另一个模板。我试图做到这一点,如下所示: 主模板: @Html.Partial("~/View
尝试通过部分将模型对象呈现为 JSON 结构,如下所示: @if( Model.IsEmpty ) { @( Model.UseNull ? "null" : "" ) } else {
现在我有下一个并且它有效 @foreach (TestLogs.Repository.DatabaseModel.Platforms CurrentPlatform in Model.Appl
我想知道如何在 Razor Pages 2.1 中创建和分配角色。应用。 我已经找到了如何为 MVC 应用程序( How to create roles in asp.net core and ass
我正在使用 Razor Engine from CodePlex在控制台应用程序中。当我在 VS 2010 IDE 中以 Debug模式运行时,一切正常。从 shell 来看,即使是上述 CodePl
我正在学习 ServiceStack razor 并希望更好地使用它(一般是 ServiceStack),但我无法让智能感知在模型上工作(通过继承指令) 这是我到目前为止的尝试:http://www.
如何在 Razor 辅助方法中包含不间断空格 ( )?这是有问题的助手: @helper RenderClipResult(Clip clip, IList searchTerms) {
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
我有一些 Razor 页面,其中包含大量条件逻辑、循环、部分 View 等。保持输出标记在语义上正确很容易,但使用正确的缩进和换行符对其进行格式化则更困难。我怎样才能在运行时自动执行此操作?有模块或
我有: @: 但它呈现为 ...lesson_icon/d40d2ff2-d06b-4fd8-80a0-0ed31bbc04eb%20.png 如何去掉.png前面的%20? 最佳答案 文件扩展名前
我有 6 个相同内容类型“新闻”的项目,在每个项目中我都有一个字段 newsIntro。我想将特定页面中的字段放在另一个页面上,因此我需要定位特定字段,因此它可能是节点 1702 上的 newsInt
是否有任何支持自动完成的 Razor 模板 (.cshtml) 的轻量级编辑器? 或任何支持 Razor 自动完成的 Notepad++、Sublime Text 2 等插件? 最佳答案 自上次测试版
有没有办法在 Razor View 引擎中创建类似的函数? @{ View.Title = "Clients"; private string GetRowClassName(RowS
我有一个名为 item 的对象,item 有一个属性 itemId。我正在尝试建立一个包含 itemId 后跟 .html 的网址...所以它看起来像“myNiftyItem-123456.html”
我想知道如何在 Razor Pages (Page.cshtml) 中获取路由值。 前任。https://localhost:44320/AdminPanel/Admins如果我使用 MVC,我会将这
如何在 F# 项目中使用 ServiceStack.Razor? 我添加了对 ServiceStack.Razor 的引用(这似乎在 Windows 上没有问题,但出于某种原因在 Mac 上的 Mon
通过Ctrl+E、D格式化这部分代码: if (row % 3 == 0) { @: } 给我: if (row % 3 == 0) { @:
我是一名优秀的程序员,十分优秀!