【问题标题】:Combining two database columns in a dropdown list在下拉列表中组合两个数据库列
【发布时间】:2014-03-25 20:39:23
【问题描述】:

我在 VS 2012 中使用 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?

【问题讨论】:

  • 通常你必须创建视图模型来在视图和控制器之间传递数据。所以这也是一种选择。此外,如果您不想使用此答案或T.Rahgooy 答案,您可以在此处尝试Konrad Gadzina 答案-stackoverflow.com/questions/16099258/…。可以肯定的是,如果您将三个字符串连接起来,它将起作用。

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


【解决方案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...") 

【讨论】:

    【解决方案2】:

    在控制器中:

    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" })
    

    【讨论】:

      【解决方案3】:

      你可以像这样在客户类中创建一个没有映射到数据库的属性

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多