我不知道如何正确地总结我正在尝试做的事情!基本上我用EF6创建了一个控制器,Client表的一个外键是MJTopicsID,它链接到MJTopics表,这是一个包含26个主题的表。在添加和编辑视图中,我希望MJTopicsID是一个显示所有可用主题的下拉菜单,但是当您选择它并单击添加或编辑条目时,它会将其作为MJTopicsID外键号添加到Client表中?我如何解决这个问题,以便将其应用到我的所有观点中。
这是我在编辑视图中创建的下拉菜单,但它只显示数字1-26,如果我将其更改为主题变量,它不知道它显然不在开放模型中,谢谢!
<div class="form-group">
@Html.LabelFor(model => model.MJTopicsID, "MJTopicsID", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("MJTopicsID", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.MJTopicsID, "", new { @class = "text-danger" })
</div>
</div>
答案 0 :(得分:3)
如果我理解正确,那么你想要显示一些可读的值,并在这种情况下保存一些特定于数据库的值,如外键ID。
在帮助方法“DropDownList”的视图中,您可以将IEnumerable类型的第二个参数作为您的选项列表,如下所示:
View:
@Html.DropDownList("MJTopicsID",
(List<SelectListItem>)@ViewBag.MJTopics,
htmlAttributes: new { @class = "form-control" })
Action:
public ActionResult Index()
{
ViewBag.MJTopics = new List<SelectListItem>() {
new SelectListItem(){Text = "Topic1", Value ="1" },
new SelectListItem(){Text = "Topic2", Value ="2" }
};
return View();
}
SelectListItem有两个属性,您可以使用模型进行映射。 您还可以将模型与“Text”一起用作值来显示,并将“value”用作要使用的值。
让“主题”成为主题的列表模型 然后你可以把它写成
topics.Select(
x=> new SelectListItem()
{
Text = x.Id,
value =x.Desc
})
这是实现目标的一种方式。
我希望它能解决你的问题。
答案 1 :(得分:0)
如果有人对EF6不熟悉并想尝试做同样的事情,我想添加一个答案。
在actionresult的控制器中你正试图这样做,所以在我的情况下创建它会创建一个viewbag变量,这是我的:
ViewBag.MJTopicsID = new SelectList(db.MJTopicss, "ID", "ID");
我把它改为:
ViewBag.MJTopicsID = new SelectList(db.MJTopicss, "ID", "topicalTF");
topicalTF是可用主题的变量,这显示了所有主题,但会将其保存为ID,希望这有帮助!