如何将选定的项目从已加入的列表传递到视图?

时间:2015-12-16 17:05:52

标签: c# asp.net-mvc nhibernate

所以我不确定我做错了什么但是我成功地将数据拉到了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);

在我的viewmodel中:

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

在我看来:

@Model.CurrentProduct.FullName;

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

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

表示FullName,即使我在控制器中清楚地显示它。我甚至快速查看了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;
    }

返回productToDetail; - 错误:无法转换表达式类型'System.Linq.IQueryable< {TypeId:int,Id:int,FullName:string,Lenth:string,Sku:string,Isbn:string,Price:string}>'返回类型'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>

FullName错误

:(

2 个答案:

答案 0 :(得分:0)

目前,模型中的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 Review(object)

答案 1 :(得分:0)

好的,我通过枚举方式而不是单个选定记录来找出答案。只需将拉出的数据发送到模型中的分离类即可。然后在主ViewModel中调用分隔的类。在视图中调用迭代。

在控制器中:

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; }
}
在viewmodel中:

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

在视图中:

{{1}}

容易。谢谢您的帮助! :d