【问题标题】:CodeFirst select the property to be displayed inside an Html.DropdownListCodeFirst 选择要在 Html.DropdownList 中显示的属性
【发布时间】:2015-06-26 05:27:31
【问题描述】:

我在 CodeFirst 脚手架 ASP.NET MVC 站点中使用了以下模型(简化):

public class Order
{
    public Guid ID {get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity), Display(Name = "Order Number")]
    public int Number { get; set; }

    public DateTime Date { get; set; }
}

public class OrderLine
{
    public Guid ID { get; set; }

    public Guid OrderID { get; set; }
    public virtual Order Order { get; set; }
}

Order 不包含字符串属性,因此在 OrderLine 的编辑视图中,GUID 显示在下拉列表中,但我想改为显示 Number 属性

<div class="form-group">
    @Html.LabelFor(model => model.OrderID, "Order Number", htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownList("OrderID", null, htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.OrderID, "", new { @class = "text-danger" })
    </div>
</div>

可以在模型级别定义应该考虑在下拉列表中显示哪个属性,或者在这种情况下,DropDownList 帮助器指定文本的语法是什么?

【问题讨论】:

  • DropDownList 的语法是什么? Here 是包含来自 msdn 的各种重载方法的链接
  • 你介意写一个在我的案例中真正有效的例子吗?

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


【解决方案1】:

可以在模型级别定义应考虑在下拉列表中显示的属性

您可以创建SelectList 的实例并将其传递给Html Helper 类的DropDownList 方法,如下所示:

ViewBag.Orders = new SelectList(db.Orders // select Orders from databse here
              , "OrderID" // value property inside the order class
              , "Name");  // display text property in the dropdown

并在下面的视图中使用它

@Html.DropDownList("OrderID", ViewBag.Orders as SelectList,  htmlAttributes: new { @class = "form-control" });

【讨论】:

  • 没有别的办法了吗?我真的需要为此将所有元素放入 ViewBag 中吗?
  • @user35912 您可以将它与模型一起传递。在视图和控制器之间传递数据的任何方法都很少,请参阅link
猜你喜欢
  • 2010-09-23
  • 2017-12-21
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多