2014-01-09 54 views
1

我有两个表,其结构如下如何调用从两个表中的数据在一个单一的视图:在ASP.net创建与实体框架模型时,MVC

Employee: 

int Id 
string EmployeeName 
string Department 

Department: 

int Dept_Id 
string Department 

系表存储所有与各部门的相应的ID,我有一个包含DropDownList的Employee的注册表单。我希望在窗体加载到下拉列表中时立即填充所有部门,因为我必须在同一个视图上调用两个模型。我正在使用元组,但它不能解决我的问题。请帮助解决我的问题。我使用的代码是:

public ActionResult Index() 
{ 

var model = new model<Employee, Department>(new Employee(), new Department()); 

    return View(model); 
} 


@model Tuple<MVcEmpApp.Models.Employee, MVcEmpApp.Models.Department>  


[HttpPost] 
public ActionResult InsertRecord(MyViewModel model) 
{ 
if(ModelState.IsValid) 
{ 
    var Employee=new Employee(); 
    Employee.EmployeeName=model.employee.EmployeeName; 
    Employee.Department=model.employee.Department; 
    db.AddToEmployee(Employee); 
    db.SaveChanges(); 
    } 
} 

请给任何建议,谢谢您的回答....

回答

0

我将创建两个类员工和部门的实体。然后

你的模型应该是

public class MyModel 
{ 
    public Employee employee {get; set;} 

    public List<Department> departments {get; set;} 
} 

你可以在这种情况下引线你下拉到各部门。您将需要添加JavaScript以使用所选值填充页面上的隐藏字段 - 您可以将其连接到员工的部门ID字段。这样,当你提交你的表单时,你的动作可以写成:

public ActionResult Submit(Employee employee) { .... } 
10

您可以创建一个拥有您的两款车型单ViewModel包装类。阅读What is ViewModel in MVC?

public class MyViewModel 
{ 
    public Employee employee{get;set;} 
    public Department dept{get;set;} 

} 

控制器

public ActionResult Index() 
{ 

    var model = new MyViewModel{employee=new Employee(), dept=new Department()} 

    return View(model); 
} 

在你看来

@model MyViewModel 

<label>First Name</label> 
@Html.TextBoxFor(m=>m.Employee.FirstName) 
+0

感谢Murali ...现在它正在工作......你能否告诉正确的方式来添加和编辑记录时使用两种模式你告诉你的方法。我编辑了我的代码并在那里编写了插入方法。通常插入和编辑我知道的代码.... – user3026519

+1

@ user3026519,这是MVC中使用最广泛的方法。视图模型倾向于与View交互。该视图可能并不代表模型的所有属性,例如CreatedDateTime&CreatedBy可以根据上下文用户登录进行检测。通常,当您单击要编辑的记录时,需要首先加载数据并允许用户使用。要加载数据,特别是在ajax世界中,人们对ajaxify方式感兴趣,以获得用户体验。为此,最好使用ajax加载上下文数据并在右侧进行替换。右侧视图有兴趣加载所选ID的数据。所以我做到了 –