提前感谢您的支持。
我在mvc5应用程序中使用Entity框架。
我使用数据库的方式是:
我创建了一个带有表属性的模型类,例如:
public class Article
{
public int ID { get; set; }
public string Name { get; set; }
}
然后我使用Scaffolding系统生成控制器和视图。 当我在表格中有一个外键时,我使用它:
public class Article
{
public int ID { get; set; }
public string Name { get; set; }
public int ProviderID {get; set;}
public virtual Provider Providers { get; set; }
}
一切都很好。当我访问视图时,正在使用关系,键,外键正确地创建表。
我的问题是:
我有一张条款表。每篇文章都可以是工具,消耗品或机器。但绝不是所有人(其中一个必须选择) 我发现这是一个0 - > N关系和表中的表示方式是一样的 1 - > N关系,但我不确定这个信息,因为在表中有未使用的字段有点愚蠢。
假设这是我的模型类的工作方式:
public class Article
{
public int ID { get; set; }
public string Name { get; set; }
public int? ToolID {get; set;}
public int? MachineID {get; set;}
public int? ConsumableID {get; set;}
public virtual Tool t { get; set; }
public virtual Machine m { get; set; }
public virtual Consumable c { get; set; }
}
我加了?签署,使这些字段不是强制性的,但它不起作用。 我生成脚手架视图和控制器。 当我运行创建视图以创建新文章时。其中一个字段是用于选择工具的下拉菜单,但我不能将其留空,我必须选择一个字段。 如果这篇文章是可靠的,例如我想选择可行的东西但是将工具和机器留空。
也许我必须在下拉列表中的视图中添加一个空字段? 在那种情况下我该怎么办?这是视图中的代码:
@Html.DropDownList("ToolID", null, htmlAttributes: new { @class = "form-control" })
答案 0 :(得分:0)
像这样。
新资产
[NotMapped]
public string Type { get; set; }
广播按钮
<label>@Html.RadioButtonFor(m => m.Type, "type-tool", new { @checked = "checked" }) Tool </label>
<label>@Html.RadioButtonFor(m => m.Type, "type-machine") Machine </label>
<label>@Html.RadioButtonFor(m => m.Type, "type-consumable") Consumable </label>
放弃下降
@Html.DropDownListFor(m => m.ToolId, new SelectList(ViewBag.Tools, "Id", "Text"), new { @class = "hidden type type-tool" })
@Html.DropDownListFor(m => m.MachineId, new SelectList(ViewBag.Machines, "Id", "Text"), new { @class = "hidden type type-machine" })
@Html.DropDownListFor(m => m.ConsumableId, new SelectList(ViewBag.Consumables, "Id", "Text"), new { @class = "hidden type type-consumable" })
<强>的Javascript 强>
<script>
$("input[type=radio][name='Type']").change(function () {
$('.type').hide();
$("." + $(this).val()).show();
}).change();
</script>
提交后,您获得Type
,只需将其他属性设为null,这与Type
不合适。