在下拉列表中组合两个数据库列

时间:2014-03-25 20:39:24

标签: c# asp.net-mvc asp.net-mvc-4 razor

我正在使用Entity Framework在本地数据库中使用VSC中的MVC 4。

在我的一个客户详细信息编辑页面上,我有一个显示客户姓氏的下拉框。剃刀代码是

    <div class="editor-label">
        @Html.LabelFor(model => model.CustomerID, "Customer")
    </div>
    <div class="editor-field">
        @Html.DropDownList("CustomerID", String.Empty)
        @Html.ValidationMessageFor(model => model.CustomerID)
    </div>

我的客户数据库表格具有以下设置。

    [CustomerID]   INT            IDENTITY (1, 1) NOT NULL,
    [LastName]     NVARCHAR (MAX) NULL,
    [FirstMidName] NVARCHAR (MAX) NULL,
    [JoinDate]     DATETIME       NOT NULL,
    [Email]        NVARCHAR (MAX) NULL,
    [Address]      NVARCHAR (MAX) NULL,
    CONSTRAINT [PK_dbo.Customer] PRIMARY KEY CLUSTERED ([CustomerID] ASC));

如何在下拉列表中结合使用firstmidname和last name?

3 个答案:

答案 0 :(得分:1)

为此使用视图模型并将SelectList存储为视图模型的属性:

public ViewModel 
{
    public int CustomerID { get; set; }
    public IList<SelectListItem> Customers { get; set; }

    public ViewModel() {
        this.Customers = new List<SelectListItem>();
    }
}

在您的控制器中填写客户选择列表:

var vm = new ViewModel();

vm.Customers = _customerService.All()
                   .Select(x => new SelectListItem {
                       Value = x.CustomerID.ToString(),
                       Text = x.FirstMidName + " " + x.LastName
                   })
                   .ToList();

return View(vm);

并在您看来:

@model ViewModel

@Html.DropDownListFor(x => x.CustomerID, Model.Customers, "Please select a customer...") 

答案 1 :(得分:1)

在控制器中:

ViewBag.CustomerID= new SelectList((from s in db.customer.ToList()
                               select new
                                  {
                                    CustomerID= s.CustomerID,
                                    FullName = s.LastName+ " " + s.FirstMidName
                                  }),
       "CustomerID",
       "FullName",
       null);

在视图中:

 @Html.DropDownList("CustomerID", null, htmlAttributes: new { @class = "form-control" })

答案 2 :(得分:0)

您可以在客户类中创建一个未映射到数据库的属性,如此

public string FullName{ get{ return FirstMidName + " " + LastName;}}