我正在开发一个小应用程序,以便更好地了解 MVC3 和 Razor 的工作原理。我正在使用 MVC3,所有代码都是自动生成的(通过 T4 的 dbContext,通过添加控制器的控制器,来自 EDMX 模型的 Databese...)。
在我的模型中,我有这个简单的模型:http: //i.stack.imgur.com/nyqu4.png
public partial class Application
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ApplicationType ApplicationType { get; set; }
}
public partial class ApplicationType
{
public int Id { get; set; }
public string Type { get; set; }
}
如您所见,ApplicationType 基本上是一个枚举(遗憾的是 EF 4 不支持枚举)。所以,在我的 ApplicationController 我有这个:
public ActionResult Create()
{
ViewBag.AppTypes = new SelectList(db.ApplicationTypes.OrderBy(c => c.Type), "Id", "Type");
return View();
}
[HttpPost]
public ActionResult Create(Application application)
{
if (ModelState.IsValid)
{
db.Applications.Add(application);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(application);
}
在我看来:
@Html.DropDownListFor(model => model.ApplicationType.Id, (SelectList)ViewBag.AppTypes, "Choose...")
现在我面临两个问题:
1) 未填充 ApplicationType:
由于@Html.DropDownListFor 仅呈现一个简单的选择,它填充ID,但不填充Type 属性,如下所示(对不起,我无法发布图像,因为我是新来的):
http://i.stack.imgur.com/96IR1.png
图中可以看到ID是ok的,但是Type是空的。
我做错了什么?
2) 重复数据
第二个问题是,如果我在调试期间手动填充 Type 属性(模拟正确的工作流场景),ApplicationType 将在数据库中复制,而不是仅引用旧注册表。
那么,如何使 @Html.DropDownListFor 引用以前的现有项目而不是创建新项目?
谢谢你的帮助!