所以我不确定我做错了什么但是我成功地将数据拉到了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错误
:(
答案 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; }
}
@model Gcus.Com.Web.Models.ViewModels.DetailPageViewModel
<h2>@foreach (var item in Model.CurrentProducts)
{
@item.FullName;
}</h2>
在视图中:
{{1}}
容易。谢谢您的帮助! :d