我有三个对象:
public class Part
{
[Key]
public int ID { get; set; }
public string Number { get; set; }
public string Name { get; set; }
public int descID { get; set; }
}
public class Description
{
[Key]
public int descID { get; set; }
public string descName { get; set; }
public string description { get; set; }
}
public class GridPart
{
public string name{ get; set; }
public string number { get; set; }
public string description { get; set; }
}
我正在使用LINQ加入descID列的Part和Description:
public ActionResult Index()
{
var myParts = from p in db.Parts
join d in db.Description on p.descID equals d.DescriptorID
select new { Description = d.description, Name = p.name};
List<GridPart> partsList = new List<GridPart>();
foreach (var m in myParts)
{
GridPart gp = new GridPart();
gp.Name = m.name;
gp.description = m.description;
partsList.Add(gp);
}
return View(partsList);
}
如果我只是使用Parts表,我会在视图中执行:
@model IEnumerable<MyApp.Models.Part>
如果我使用连接表,该怎么办?这使用了部件和描述,更不用说我的GridParts列表,如何通过它来显示我需要的所有数据?
非常感谢任何建议。
答案 0 :(得分:2)
如果您将匿名类型传递给视图,则不会强类型化。您可以参考这样的模型
@Html.TextBox("Name")
或
@Html.Display("Name")
虽然这会起作用,但我会建议反对它 - 更好的解决方案是使用Viewmodel代替。这将使您的视图强烈输入。
编辑:再看一遍,我发现您实际上没有将匿名类型解析为您的视图。您正在解析GridParts列表。
您应该能够像尝试的那样强烈地键入您的视图 - 只需参考GridParts而不是部分。
@model IEnumerable<MyApp.Models.GridPart>