从不同的表中获取数据并将其显示在mvc4的View Index中

时间:2014-02-26 09:50:28

标签: asp.net-mvc-4

我有2个表Work_tableEmployee_table。我想在emp_id中显示Work_table,在{1}}中显示相应的emp_name查看Employee_table。 我的模特是:

Employee_table

如何编写控制器? 在控制器中编写函数时,我坚持了下来。

namespace MvcConQuery.Models
{
[Table("Work_Table")]
public class EnquiryModel
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public Int32 Enq_id { get; set; }
[Required]
[Display(Name="Name")]
public string CustomerName { get; set; }
[ReadOnly(true)]
public string Date
{
get
{
DateTime Date = DateTime.Now;
return Date.ToString("yyyy-MM-dd"); ;
}
set{}
}
[Required]
[Display(Name = "Region")]
public string Region { get; set; }
[Required]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Entered phone number format is not valid.")]
[Display(Name = "Phone number")]
public string Ph_No { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email_id")]
public string Email_id { get; set; }
[Required]
[Display(Name = "Address")]
public string Address { get; set; }
[Required]
[Display(Name = "Query")]
public string Query { get; set; }
public string Referral { get; set; }
public string Feedback { get; set; }
public string Status { get; set; }
public Int32? Emp_id { get; set; }
public string FollowUpDate { get; set; }
public List<EmployeeModel> Employees { get; set; }
}}


namespace MvcConQuery.Models
{
[Table("Employee_Table")]
public class EmployeeModel
{

[Key,Column(Order=0)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
//[ForeignKey("EnquiryModel")]
public Int32 Emp_id { get; set; }
public string Emp_Name{ get; set; }
//[Key,Column(Order=1)]
public string Region { get; set; }
//[ForeignKey("Region")]
public string Emp_PhNo { get; set; }
public string Emp_Address { get; set; }
public List<EnquiryModel> Enquires { get; set; }


}

}

请提出解决方案。提前谢谢。

此致

2 个答案:

答案 0 :(得分:3)

我之前错了,我从你的代码中发现EmployeeWork表之间存在多对多的关系。为方便起见,我使用Job作为Work表/模型的名称。

我希望您在索引视图中显示EmployeeIds列表以及相应的EmployeeNames。我在viewmodel中添加了一个名为JobName的额外属性,你也可以拥有其他属性。

就此而言,创建一个ViewModel EmployeeViewModel并将您的操作结果的index viewIEnumerable<EmployeeViewModel>绑定。 EmployeeViewModel的定义可以是 -

    public class EmployeeViewModel
    {
        public int EmployeeId { get; set; }

        public string EmployeeName  { get; set; }

        public string JobName { get; set; }

        //..Other memberVariables..
    }


假设这些是你的模特 -  
Employee

        public class Employee
        {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int EmployeeId { get; set; }

            public string EmployeeName { get; set; }

            public string Address { get; set; }

            public virtual ICollection<Job> Jobs { get; set; }
        }

WorkTable,为了方便起见,重命名为Job

    public class Job
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int JobId { get; set; }

        public string JobName { get; set; }

        public JobCategory JobCategory { get; set; }

        public int EmployeeId { get; set; }

        public virtual ICollection<Employee> Employees { get; set; }
    }

在“索引操作”中,通过连接两个表来创建结果集,将其绑定到IEnumerable<EmployeeViewModel>并将其作为模型传递给视图。如前所述,View应该会收到IEnumerable<EmployeeViewModel>类型的模型,因此您需要查询您的实体,这些实体应该类似于 -

    public ActionResult Index()
    {
        //..something like this..this is IQueryable..
        //...convert this to IEnumerable and send this as the model to ..
        //..the Index View as shown below..here you are querying your own tables, 
        //.. Employee and Job,and binding the result to the EmployeeViewModel which
        //.. is passed on to the Index view.
        IEnumerable<EmployeeViewModel> model=null;
        model = (from e in db.Employees
                    join j in db.Jobs on e.EmployeeId equals j.EmployeeId
                    select new EmployeeViewModel
                    {
                        EmployeeId = e.EmployeeId,
                        EmployeeName = e.EmployeeName,
                        JobName = j.JobName
                    });

        return View(model);
    }

你的索引视图应该是 -

@model IEnumerable<MyApp.Models.EmployeeViewModel>

@{
    ViewBag.Title = "Index";
}


<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.EmployeeId)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.EmployeeName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.JobName)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.EmployeeId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.EmployeeName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.JobName)
        </td>
    </tr>
}

</table>

在上述解决方案中,我尝试生成与您类似的情况并解决您的疑虑。我希望这会给你的担忧带来一些喘息的机会并帮助你继续前进。将此作为地图,并尝试按照路线找到您自己的目的地/解决方案。顺便说一句,抱歉这个延迟回复。希望这会有所帮助。

答案 1 :(得分:0)

此代码缺少选择新的EmployeeviewModel

model = (from e in db.Employees
                    join j in db.Jobs on e.EmployeeId equals j.EmployeeId
                    select new EmployeeViewModel
                    {
                        EmployeeId = e.EmployeeId,
                        EmployeeName = e.EmployeeName,
                        JobName = j.JobName
                    });