2015-04-19 132 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。 –

相關問題