如何将所选项目从连接列表传递到视图?
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
所以我不确定我做错了什么,但我成功地提取了数据并将其发送到 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