2015-04-19 42 views
0

我在使用EF5的MVC 4 Web应用程序中使用数据库优先方法。我在我的背景下表:如何在视图中显示来自其他表的数据?

**Employee** <br> 
EmpId <br> 
StatusId 

一个Employee表的行是:

EmpId=1<br> 
StatusId=1 

选项

OptionId<br> 
OptionListName<br> 
OptionName<br> 
OptionValue<br> 

之一行选项表如下:

OptionId=1 
OptionListName="Status" 
OptionName="Active" 
OptionValue=1 

我创造了我的EmployeeController显示从Employee表某些字段如下一种观点:

Employee 
----------- 
EmpId  StatusId 
1   1 

不过,我需要查看表如下:

Employee 
----------- 
EmpId  Status 
1   Active 

我该怎么办这在MVC中?

+0

您需要ViewModel –

回答

0

你需要一个需要IEnumerable<Employee>的Viewmodel,如果你只有一个选项,你需要一个Options。视图模型看起来就像这样:

public class YourNamedViewModel 
{ 
    public IEnumerable<Employee> Employees { get; set; } 
    public Options Options { get; set; } 
} 

然后在你看来,你改变你的模型

@using PathTo.ViewModel 
@model YourNamedViewModel 

<table> 
    <tr> 
     <th> 
      @Html.LabelFor(m => m.Employees.EmpId) 
     </th> 
     <th> 
      @Html.LabelFor(m => m.Options.OptionListName) 
     </th> 
    </tr> 
    @foreach (var item in Model.Employees) 
    { 
     <tr> 
      <td> 
       item.EmpId 
      </td> 
       @if (item.StatusId == 1) 
       { 
        <td> 
         <span>@Model.Options.OptionName</span> 
        </td> 
       } 
       else 
       { 
        <td> 
         <span>Inactive</span> 
        </td> 
       } 
     </tr> 
    } 
</table> 

如果您有任何其他状态的模式,你在你的视图模型需要一个IEnumerable<Options>并找到相应的选项与Employee相同的OptionId。

还没有能够测试它,但它应该工作。

+0

但是如果我在这个表中已经存在这些选项,就像我的问题一样? – user4612290

+0

对不起,我会编辑我的答案 –

+0

我希望这个编辑好的答案对你更好。另一种处理Options的方法是使它成为一个名为Options的枚举,并具有Active,Inactive和所有你想要的状态模式。这样,您可以通过Enum项目中的Enum和Id的名称获取标题Status,然后可以通过在每个Enum项目上设置[Display(Name =“Status Name”)]来显示Status Name。 –

相关问题