首页 > 解决方案 > 在 ASP.NET MVC 和 MySQL 中通过 ODBC 绑定下拉列表

问题描述

我的问题:

尝试通过 ODBC 从 Visual Studio(ASP.NET MVC 项目)到使用 MYSQL 的远程服务器(Fishbowl)建立连接。最终目标是将数据库中的数据绑定到下拉列表。当我运行代码时,我没有从查询列中实际检索行,而是得到这样的输出:

在此处输入图像描述

我哪里错了?有什么建议或替代方法吗?谢谢!

控制器连接部分

DataSet ds = new DataSet();

        using (OdbcConnection connfb = new OdbcConnection("DSN=Fishbowl"))
        {
            using (OdbcCommand cmd = new OdbcCommand("select xyz from abc", connfb))
            {
                connfb.Open();
                cmd.ExecuteNonQuery();

                OdbcDataAdapter da = new OdbcDataAdapter(cmd);
                //da.Fill(dt);
                da.Fill(ds);

                List<AddInventoryModel> refNumList = new List<AddInventoryModel>();
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    AddInventoryModel robj = new AddInventoryModel();
                    robj.referenceNumber = ds.Tables[0].Rows[i]["num"].ToString();
                    refNumList.Add(robj);
                }
                Adi.refNumDD = refNumList;
            }
            connfb.Close();

模型

 public class AddInventoryModel
    {
    [Display(Name = "1. Reference Number: ")]
        [Required(ErrorMessage = "Reference Number is required!")]
        public string referenceNumber { get; set; }

    public List<AddInventoryModel> refNumDD { get; set; }

看法

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.referenceNumber, htmlAttributes: new { @class = "control-label col-md-100" })
        <div class="col-md-20">
            @Html.DropDownListFor(model => model.referenceNumber, new SelectList(Model.refNumDD, "referenceNumber"), "Choose reference number")
        </div>
    </div>
}

标签: c#asp.net.netado.netodbc

解决方案


您正在使用不正确的SelectList构造函数重载。

使用这个重载

public SelectList (System.Collections.IEnumerable items, 
                   string dataValueField, 
                   string dataTextField);

第二个参数是将用于设置 OPTION value 属性值的 value 字段,第三个参数是将用于呈现 OPTION 文本的文本字段。

由于您的控制器代码仅设置对象的referenceNumber属性
AddInventoryModel,因此您可以将其用于 dataTextField 和 dataValueField。

@Html.DropDownListFor(model => model.referenceNumber, 
                       new SelectList(Model.refNumDD, "referenceNumber","referenceNumber"),
                       "Choose reference number")

对于渲染 SELECT 元素,我个人更喜欢SelectListItem在我的视图模型中使用集合,而不是自定义对象的集合。


推荐阅读