如何将所选项目从连接列表传递到视图?

How to Pass selected items from a joined list to the view?

所以我不确定我做错了什么,但我成功地提取了数据并将其发送到 ViewModel,但我似乎无法在视图中显示结果。

在我的控制器中:

var verbiage = HttpUtility.HtmlEncode("Hello World");

var productToDetail = _contentService
            .Products
            .Where(q => q.Id == 112)
            .Select(x => new { x.TypeId, x.Id, x.FullName, x.Length, x.Sku, x.Isbn, x.Price });

var model = new DetailPageViewModel
        {
            ProgramTables = GetUpComingCourses(),
            Verbiage = verbiage,
            CurrentProduct = productToDetail.ToList()
        };
return View(model);

在我的视图模型中:

public string Verbiage { set; get; }
public IList CurrentProduct { get; set; }

在我看来:

@Model.CurrentProduct.FullName;

视图看到 CurrentProduct 在那里,但给我这个错误

'System.Collections.IList' 不包含 'FullName' 的定义并且没有扩展方法 'FullName' 可以找到接受类型 'System.Collections.IList' 的第一个参数(您是否缺少使用指令或程序集引用?)

对于全名,尽管我清楚地在控制器中使用了它。我什至快速查看了 productToDetail 并看到提取了正确的信息。

我无计可施!请帮忙!

好的,所以我仍然不知道为什么我的数据没有被拉到视图中....

更新

在我的控制器中:

    public static List GetCurrentApp(int item)
    {


        var productToDetail = _contentService
            .Products
            .Where(q => q.Id == item)
            .Select(x => new {x.TypeId, x.Id, x.FullName, x.Length, x.Sku, x.Isbn, x.Price});


        return productToDetail;
    }

在 return productToDetail 上; - 错误:无法将表达式类型 'System.Linq.IQueryable<{TypeId:int,Id:int, FullName:string,Lenth:string,Sku:string,Isbn:string, Price:string}>' 转换为 return 类型 'NHibernate.Mapping.List'

 public ActionResult Details(int item)
    {

        var verbiage = HttpUtility.HtmlEncode("Hello World");

        var model = new DetailPageViewModel()
        {
            Verbiage = verbiage,
            CurrentProduct = GetCurrentApp(item)
        };

        return View("../Shared/DetailView", model);
    }

在我的模型中:

public class DetailPageViewModel
{
    public string Verbiage { set; get; }
    public List CurrentProduct { get; set; }
}

在我看来:

@model Project.Models.ViewModels.DetailPageViewModel
<h2>@Model.CurrentProduct.FullName</h2>

全名错误

:(

目前,您模型中的 CurrentProduct 是一个项目列表。根据您的查询判断,它只是一个列表,但仍然是一个列表。

快速解决方法是将 @Model.CurrentProduct[0].FullName 放入您的视图中,但实际上您应该调整查询以便只返回一个对象。我会这样做:

var productToDetail = _contentService
        .Products
        .SingleOrDefault(q => q.Id == 112);

var model = new DetailPageViewModel
    {
        ProgramTables = GetUpComingCourses(),
        Verbiage = verbiage,
        CurrentProduct = productToDetail
    };

请注意,如果使用该 ID 返回多个结果,SingleOrDefault() 将抛出异常,如果您不想这样做,请使用 FirstOrDefault()

好的,我通过枚举而不是单个选择的记录找到了答案。只需将提取的数据发送到模型中的单独 class。然后在主 ViewModel 中调用单独的 class。在视图中调用迭代。

在控制器中:

public ActionResult Details(string item)
    {

        var verbiage = HttpUtility.HtmlEncode("Hello World");



        var productToDetail = _contentService
            .Products
            .Where(q => q.Id == item)
            .Select(x => new CurrentProduct
            {
                TypeId = x.TypeId,
                Id = x.Id,
                FullName = x.FullName,
                Length = x.Length,
                Sku = x.Sku,
                Isbn = x.Isbn,
                Price = x.Price
            });



        var model = new DetailPageViewModel()
        {
            Verbiage = verbiage,
            CurrentProducts = productToDetail
        };

        return View("../Shared/DetailView", model);
    }

在视图模型中:

public class DetailPageViewModel
{
    public string Verbiage { set; get; }
    public IEnumerable<CurrentProduct> CurrentProducts { get; set; }
}

public class CurrentProduct
{
    public int TypeId { get; set; }
    public int Id { get; set; }
    public string FullName { get; set; }
    public string Length { get; set; }
    public string Sku { get; set; }
    public string Isbn { get; set; }
    public string Price { get; set; }
}

在视图中:

@model Gcus.Com.Web.Models.ViewModels.DetailPageViewModel
<h2>@foreach (var item in Model.CurrentProducts)
                {
                    @item.FullName;
                }</h2>

简单。谢谢您的帮助! :D