我很难用MVC视图解决以下问题。
我的目标是在单个MVC视图中显示来自多个表的数据。大部分数据来自名为Retailers的表。我还有另一个名为RetailerCategories的表,它存储来自Retailers表的retailerid,以及一个链接到Category表的categoryid。
请注意,RetailerCategories表中的每个retailerid都有多条记录。
在视图中,我想显示零售商列表,并希望每个零售商都能显示适用于他们的类别列表。
实现这一目标的最佳方法是什么?我尝试过的一些内容包含在Can you help with this MVC ViewModel issue?
中然而,这似乎不是正确的方法。
答案 0 :(得分:12)
您需要一个专门针对此视图需求量身定制的视图模型。在定义视图模型时,您不应该考虑表格。 SQL表在视图中绝对没有意义。根据您需要显示哪些信息并相应地定义视图模型。然后,您可以使用AutoMapper在真实模型和已定义的视图模型之间进行转换。
所以忘记关于表格的所有内容并关注以下句子:
在视图中我想显示一个列表 零售商和每个零售商我 想要显示类别列表 适用于他们。
这句话实际上非常好,因为它准确地解释了你的需要。所以,一旦你知道你需要什么,继续进行模型化:
public class CategoryViewModel
{
public string Name { get; set; }
}
public class RetailerViewModel
{
public IEnumerable<CategoryViewModel> Categories { get; set; }
}
现在,您强烈地将视图键入IEnumerable<RetailerViewModel>
。从这里开始,您可以轻松地在视图中执行您想要的操作:
显示零售商列表,每个零售商都有相关类别列表。
答案 1 :(得分:1)
这可能也有帮助;
答案 2 :(得分:0)
一步一步做我说的很简单。
将连接字符串添加到web.config
文件
从解决方案资源管理器中选择模型,并按以下方式添加4个类
第一个表的第一个等级&#34;我使用了有3列的表
公共课雇用 { [键] public int Emp_id {get;组; } public string Emp_name {get;组; } public string Emp_city {get;组; } }
我的节奏表第二课
公共课节奏 { [键] public int ID {get;组; } public int Emp_Id {get;组; } 公共字符串主题{get;组; } 公共字符串爱好{get;组; } }现在我在模型文件夹中创建了一个第三个类,它包含了我想要的值来自雇用表和速度表
public class Alladd
{
public int ID { get; set; }
public int Emp_Id { get; set; }
public string subject { get; set; }
public string hobby { get; set; }
public string Emp_name { get; set; }
public string Emp_city { get; set; }
}
,最后一个类是datacontext类
public class DataContext:DbContext
{
public DataContext() : base("DefaultConn")//connection string
{
}
public DbSet<Employ> Empdata { get; set; }
public DbSet<tempo> Tempdata { get; set; }
}
现在转到Home控制器并添加如下代码
public ActionResult file()
{
// IList<tempo> tempi=new List<tempo>();
IEnumerable<Alladd> model = null;
// model = getVerifydetails(id);
// return View(objcpModel);
List<Alladd> verify = new List<Alladd>();
cn.Open();
if (cn.State == ConnectionState.Open)
{
string query = "select Employ.Emp_name,Employ.Emp_id,Employ.Emp_city,tempo.hobby,tempo.id,tempo.subject from Employ inner join tempo on Employ.Emp_id=tempo.Emp_id;";//joining two table
SqlCommand cmd=new SqlCommand(query,cn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
verify.Add(new Alladd { Emp_name = dr[0].ToString(), Emp_Id= Convert.ToInt32(dr[1].ToString()), Emp_city = dr[2].ToString(), hobby = dr[3].ToString(),ID = Convert.ToInt32(dr[1].ToString()),subject= dr[4].ToString()});//filling values into Alladd class
}
cn.Close();
}
return View(verify);
}
现在最后一步很简单
现在你已经完成了
快乐的编码......