【问题标题】:Trying to bind Dropdownlist from db getting error试图从数据库绑定下拉列表得到错误
【发布时间】:2020-09-03 03:38:57
【问题描述】:

嗨,我正在尝试从来自 db 的值绑定 Dropdownlist 得到错误 详情如下 型号

public class Ipcell
{  public List<ddlupc> upcList { get; set; }
}
    public class ddlupc
    {
     public string UscCode { get; set; }
    public string UscDesc { get; set; }
    
}

控制器 正在从 jquery 调用 Ajax 值来了

public PartialViewResult RaiseBill(List<Ipcell> casedetail1)
        {List<Ipcell> result1 = new List<Ipcell>();
            conn.Open();
            string qry1 = "select IUM_USC_CODE,IUM_USC_DESC from V_IP_USC_MAST";
            OracleCommand command1 = new OracleCommand(qry1, conn);
            OracleDataReader reader1 = command1.ExecuteReader();
            List<ddlupc> objlist = new List<ddlupc>();
            Ipcell member1 = new Ipcell();
            while (reader1 != null && reader1.Read())
            {               

            objlist.Add(new ddlupc { UscCode = reader1[0].ToString(), UscDesc = reader1[1].ToString() });
             result1.Add(member1);
            }
            member1.upcList = objlist;
            conn.Close();
  if (casedetail1!=null)
            {
                ViewBag.Caseid = casedetail1[0].CaseId;
            }
            
            return PartialView("RaiseBill", result1);          

        }
      

查看

@model Smart_M.Models.Ipcell
<div>
<div style="padding-left:5%">Usc Code</div><span style="padding-left:5%">@Html.DropDownList("upcList",Model.upcList) </span><br />
</div>

出现错误“无法从 'System.collections.Generic.List 转换为 'string'。

【问题讨论】:

    标签: c# jquery asp.net asp.net-mvc


    【解决方案1】:

    出现错误“无法从 'System.collections.Generic.List 到'字符串'。 任何想法将不胜感激。

    因为@Html.DropDownList绑定的数据源是IEnumerable&lt;SelectListItem&gt;类型,而Model.upcListList&lt;ddlupc&gt;类型,导致报错。

    要解决这个问题,可以将Model.upcList转化为IEnumerable形式,如下:

    @Html.DropDownList("upcList", new SelectList(Model.upcList, "UscCode", "UscDesc"))
    

    你也可以参考this更多在asp.net core中绑定dropdownlist的方法。

    更新

    public PartialViewResult RaiseBill(List<Ipcell> casedetail1)
            {List<Ipcell> result1 = new List<Ipcell>();
                conn.Open();
                string qry1 = "select IUM_USC_CODE,IUM_USC_DESC from V_IP_USC_MAST";
                OracleCommand command1 = new OracleCommand(qry1, conn);
                OracleDataReader reader1 = command1.ExecuteReader();
                List<ddlupc> objlist = new List<ddlupc>();
                Ipcell member1 = new Ipcell();
                while (reader1 != null && reader1.Read())
                {               
    
                objlist.Add(new ddlupc { UscCode = reader1[0].ToString(), UscDesc = reader1[1].ToString() });
                 result1.Add(member1);
                }
                member1.upcList = objlist;
                conn.Close();
      if (casedetail1!=null)
                {
                    ViewBag.Caseid = casedetail1[0].CaseId;
                }
    
                ViewData["dropSrc"] = objlist ;
                return PartialView("RaiseBill", result1);          
    
            }
      
    

    提高账单视图:

    @model IEnumerable<Smart_M.Models.Ipcell> 
    @{
        ViewData["Title"] = "IncellTest";
        Layout = "~/Views/Shared/_Layout.cshtml";
    } 
    
    <div>
        <div style="padding-left:5%">Usc Code</div>
        <span style="padding-left:5%">@Html.DropDownList("upcList", new SelectList((IEnumerable<Smart_M.Models.ddlupc>)ViewData["dropSrc"], "UscCode", "UscDesc")) </span>
        <br />
    </div>
    

    【讨论】:

    • @yongging 我试过但收到错误传递到字典的模型项的类型为“System.Collections.Generic.List`1[Smart_M.Models.Ipcell]”,但此字典需要模型“Smart_M.Models.Ipcell”类型的项目
    • @Mohan,这个错误说明view对应的action放回的model是List&lt;Ipcell&gt;,而你的view引用了Ipcell,可以把view model改成@model IEnumerable&lt;Smart_M.Models.Ipcell&gt;。但这会与您的下拉列表数据源冲突。希望您阐明您的需求并提供完整的代码,否则我们无法为您提供正确的解决方案。
    • @Mohan,如果从动作传递到视图的数据是数据的集合,那么Model.upcList 将不再持有。如果下拉列表数据源是固定的,那么您可以在操作中使用ViewData,并将List&lt;ddlupc&gt;绑定到下拉列表。
    • @Mohan,我已根据您的代码和要求更新了我的回复,希望对您有所帮助。
    【解决方案2】:

    DropDownList 使用 SelectListItem 进行数据绑定示例:

    @Html.DropDownList("Names", new List<SelectListItem>  
    {  
       new SelectListItem{ Text="NAME1", Value = "1" },  
       new SelectListItem{ Text="NAME2", Value = "2" },  
       new SelectListItem{ Text="NAME3", Value = "3" },   
    })  
    

    例如,请将 Model.upcList 更改为 List:

    <div style="padding-left:5%">Usc Code</div>
    <span style="padding-left:5%">
    @Html.DropDownList("upcList",Model.upcList.Select(x => new SelectListItem(){Text  
     = x.UscDesc ,Value = x.UscCode }).ToList())
    </span>
    

    <div style="padding-left:5%">Usc Code</div>
    <span style="padding-left:5%">
    @Html.DropDownList("upcList", new SelectList(Model.upcList,"UscCode", "UscDesc"))
    </span>
    
    

    【讨论】:

      【解决方案3】:

      在视图中绑定下拉菜单

      一个。我们可以使用 HTML.Dropdownlist 绑定下拉列表(它是一个 HTML 帮助类)。

      ListItems:

      这里我们将“ListItems”从控制器传递到视图。

      b. HTML.DropdownList 类的另一个重载方法,用于绑定下拉列表。

      <%= Html.DropDownList("SelectedItem", (IEnumerable<SelectListItem>)ViewData["ListItems"])%>  
      

      在执行后检查正确的上述代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多