.NET显示不同的数据库变量但保存为ID?

时间:2017-12-30 18:58:18

标签: c# asp.net-mvc entity-framework-6

我不知道如何正确地总结我正在尝试做的事情!基本上我用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>

2 个答案:

答案 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,希望这有帮助!