我继承了一个完成了一半的 MVC 项目,该项目是为了跟踪我们客户产品的许可证。
许可证 Create.cshtml 页面上有两个下拉列表,第一个允许您选择客户,第二个然后填充客户拥有的产品 (CustomerProducts) 以允许您选择要创建的 CustomerProduct许可,如下:
<div class="editor-label">Customer</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.SelectedCustomerId, new SelectList(Model.Customers, "Id", "Name"), "-- Select Customer --")
@Html.ValidationMessageFor(model => model.SelectedCustomerId)
</div>
<div class="editor-label">Product</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.SelectedCustomerProductId, Enumerable.Empty<SelectListItem>(), "-- Select Product --")
@Html.ValidationMessageFor(model => model.SelectedCustomerProductId)
</div>
我遇到的问题是 CustomerProducts 与产品和版本相关联,但下拉列表仅显示产品名称,而不是版本名称,因此如果客户同时拥有“产品名称 v1.0”和“产品名称 v1.0”。 1" 下拉列表仅显示 Productname 两次。所以我要寻找的是(伪代码):
@Html.DropDownListFor(model => model.SelectedCustomerProductId + " (" + model.SelectedCustomerProductId.ProductVersion.Name + ")", Enumerable.Empty<SelectListItem>(), "-- Select Product --")
我确信必须有一种简单的方法来让该下拉列表同时显示产品和版本,但我已经搜索并搜索了我能想到的所有来源,但无法提出解决方案。
抱歉,如果这是一个基本问题;我是 MVC 的新手,花了几天时间寻找解决方案,以解决在我看来应该是一个非常简单的问题!
编辑:
遵循@von v. 的以下建议,向 CustomerProduct 添加了一个只读属性:
public virtual string ProductVersionFullName { get { return Product.Name + " (" + ProductVersion.Name + ")"; } }
这只是使用该属性作为显示成员的情况,而不是尝试绑定到下拉列表中 CustomerProduct 的多个属性(下拉列表由设置显示成员的 LicensesController 中的方法填充)。我知道我错过了一些简单的东西!