我正在使用ASP.NET MVC3以及Razor和Entity Framework Code First来创建一个新的非常小的应用程序。从我阅读和看过的所有内容来看,当类和数据之间存在FK关系时,Razor应该生成一个下拉(选择)输入字段。但是,当下面的代码运行时,我得到了PartnerTypeId和PartnerSubTypeId的文本框。不确定我的故障在哪里。
public class Partner
{
public int Id { get; set; }
[Required]
[MinLength(5)]
[MaxLength(300)]
public String Name { get; set; }
[Required]
public int PartnerTypeId { get; set; }
public PartnerType PartnerType { get; set; }
public int PartnerSubTypeId { get; set; }
public PartnerSubType PartnerSubType { get; set; }
}
public class PartnerType
{
public int Id { get; set; }
[Required]
[MaxLength(40)]
public String Name { get; set; }
[Required]
public bool IsActive { get; set; }
public virtual ICollection<Partner> Partners { get; set; }
}
<fieldset>
<legend>Partner</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.PartnerTypeId)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PartnerTypeId)
@Html.ValidationMessageFor(model => model.PartnerTypeId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.PartnerSubTypeId)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PartnerSubTypeId)
@Html.ValidationMessageFor(model => model.PartnerSubTypeId)
</div>
</fieldset>
答案 0 :(得分:1)
从我所阅读和看到的一切,当有FK关系时 在类和数据之间,Razor应该生成一个下拉列表(选择) 输入字段。
我不知道你在哪里看到或看过这样的东西。以下是ASP.NET MVC中的default editor templates。正如您所看到的,除了可以为空的布尔属性之外,它们都不会生成任何<select>
个元素。
Razor对FK关系的含义一无所知。它不知道数据库意味着什么。 Razor是一个模板化视图引擎,可以与模型一起使用,并且支持标准编辑器和显示模板(请参阅我已链接到的文章),这些模板依赖于您使用模型属性修饰的元数据以及属性的类型。如果您对默认模板提供的内容不满意,您当然可以编写自定义模板。例如,您可以编写一个生成下拉列表的编辑器模板。当然,为了生成下拉列表,不要忘记您需要两件事:一个用于绑定所选值的标量属性和一些复杂类型的集合属性,其中每个元素至少包含2个表示值和文本的属性这将用于绑定下拉列表的选项。