加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – MVC SelectList中的LINQ查询结果为值和文本 – 无效

发布时间:2020-12-15 18:05:12 所属栏目:百科 来源:网络整理
导读:我试图使用LINQ查询的结果来填充MVC 5应用程序中的SelectList. LINQ查询返回客户ID. 模型 public partial class Pricelist{ public int CustomerID { get; set; } public int SelectedCustomer { get; set; } public Pricelist(int customerID,int selectedC
我试图使用LINQ查询的结果来填充MVC 5应用程序中的SelectList.
LINQ查询返回客户ID.

模型

public partial class Pricelist
{
    public int CustomerID { get; set; }
    public int SelectedCustomer { get; set; }

    public Pricelist(int customerID,int selectedCustomer)
    {

    }
}

视图

@Html.DropDownList("custList")

控制器(1)

var query = ((from s in db.Pricelists
                     select s.CustId).Distinct()).ToList();

int i = 1;
List<Pricelist> CustomerList = new List<Pricelist>();
foreach (var c in query)
{
    int cust = c;
    Pricelist p = new Pricelist(i,cust);
    CustomerList.Add(p);
    i++;
}

SelectList custList = new SelectList(CustomerList); 
ViewBag.custList = custList;

return View();

返回使用Model类名填充的下拉列表
(如果我试图在foreach中返回i和cust .ToString(),我会得到一个例外.)
我试过这个,因为下面的Controller方法生成了不同的CustomerID列表,但是在POST时返回NULL(我想因为SelectList中没有指定Value)

public ActionResult Create()
{
    var query = (from s in db.Pricelists
                 select s.CustId).Distinct(); 

    SelectList CustomerList = new SelectList(query);

    ViewBag.custList = CustomerList;

    return View();
}

指向我出错的地方,以及如何继续前行.

解决方法

我认为使用ViewBag来填充mvc中的下拉列表并不是那么好.
你应该改变你的模型以获得SelectedListItem列表并从PriceList列表中填充它,所以它应该如下所示:
public class Model
{
     public int CustomerID { get; set; }
     public int SelectedCustomer { get; set; }
     public IList<Pricelist> PriceList{get;set;}
     public IList<SelectListItem> PriceListSelectListItem{get;set;}
        {
            get
            {
                   var list = (from item in PriceList
                            select new SelectListItem()
                            {
                                Text = item.customerID.ToString(CultureInfo.InvariantCulture),Value = item.selectedCustomer.ToString(CultureInfo.InvariantCulture)
                            }).ToList();
                return list;
            }
            set{}
        } 

}

现在你可以做这样的事情了:

@Html.DropDownListFor(c=>c.CustomerID,Model.PriceList)

尝试使用这样的下拉列表,这看起来比在视图中使用ViewBag更专业.

控制器:

var query = ((from s in db.Pricelists
                     select s.CustId).Distinct()).ToList();

int i = 1;
List<Pricelist> CustomerList = new List<Pricelist>();
foreach (var c in query)
{
    int cust = c;
    Pricelist p = new Pricelist(i,cust);
    CustomerList.Add(p);
    i++;
}

    model.PriceList=result of your query

return View("ViewName",model);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读