【问题标题】:ASP.Net Passing ViewModel to View (Underlying entity framework)ASP.Net 将 ViewModel 传递给 View(底层实体框架)
【发布时间】:2015-02-21 01:05:31
【问题描述】:

我在将 ViewModel 传递到视图时遇到问题。

我的视图模型:

namespace ImpactDBASPNet.Models
{
    public class ComputerInfoViewModel
    {
        public List<string> CompanyList { get; set; }
        public tbl_computerinfo entitymodeleffort { get; set; }
    }
}

控制器:

    public ActionResult Index()
    {
        var tbl_computerinfo = db.tbl_computerinfo.Include(t => t.tbl_equipment);
        tbl_computerinfo = tbl_computerinfo.Where(c => c.Company == "Test Company");

        List<string> companylist = new List<string>();
        companylist.Add("Hello1");
        companylist.Add("hello2");

        ComputerInfoViewModel model = new ComputerInfoViewModel();
        model.CompanyList = companylist;
        model.entitymodeleffort = tbl_computerinfo;

        return View(model);
    }

我这样做主要是因为我需要在我的视图中传递一个下拉列表的列表,所以我需要传递实体框架模型和列表。我得到的错误是:

Error   1   Cannot implicitly convert type 'System.Linq.IQueryable<ImpactDBASPNet.Models.tbl_computerinfo>' to 'ImpactDBASPNet.Models.tbl_computerinfo'. An explicit conversion exists (are you missing a cast?)    c:\impactdbaspnet\controllers\tbl_computerinfocontroller.cs 31  39  ImpactPortal

【问题讨论】:

  • 您的.Where 子句生成IEnumerable&lt;tbl_computerinfo&gt;。将.FirstOrDefault() 添加到末尾以返回单个tbl_computerinfo(您可能想要测试null
  • 感谢您的回复,斯蒂芬。这会产生刚刚反转的相同错误,IE 无法将 ImpactDBASPNet.Models.tbl_computerinfo 隐式转换为 System.Linq.Iqueryabletbl_computerinfo) 它还保留了我最初遇到的现有错误,所以现在有两个错误而不是一个。
  • 没有意义。你做了tbl_computerinfo = tbl_computerinfo.Where(c =&gt; c.Company == "Test Company").FirstOrDefault();吗?
  • 好的,可以看到问题 - 您需要更改其中一个变量名称(第一行返回IEnumerable&lt;tbl_computerinfo&gt;,但在第二行中您尝试将相同的变量更改为tbl_computerinfo)。而是做var info = db.tbl_computerinfo.Include(t =&gt; t.tbl_equipment); tbl_computerinfo = info.Where(c =&gt; c.Company == "Test Company").FirstOrDefault();
  • 斯蒂芬,这行得通。非常感谢您的帮助。如果您想将其转化为答案,我会将其标记为解决方案!

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

Property entitymodeleffort 是 typeof tbl_computerinfo 但您将 IEnumerable&lt;tbl_computerinfo&gt; 分配给它,导致错误。您需要使用返回单个 tbl_computerinfo 对象的 FirstOrDefault()(或其中一种变体 - Single() 等)。

把代码改成

public ActionResult Index()
{
  var tbl_computerinfo = db.tbl_computerinfo
   .Include(t => t.tbl_equipment)
   .Where(c => c.Company == "Test Company")
   .FirstOrDefault();
  List<string> companylist = new List<string>() { "Hello1", "Hello2" }; // save a few lines of code
  ComputerInfoViewModel model = new ComputerInfoViewModel();
  model.CompanyList = companylist;
  model.entitymodeleffort = tbl_computerinfo;
  return View(model);
}

旁注:由于companylist 用于dropdownlist,您可以将属性设为SelectList

public SelectList CompanyList { get; set; }

model.CompanyList = new SelectList(companylist);

在视图中

@Html.DropDownListFor(m => m.entitymodeleffort.SomeProperty, Model.CompanyList, ...)

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2010-10-29
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多