MVC 3 - 如何在视图索引视图中显示查找值而不是ID字段

时间:2012-07-18 11:37:31

标签: .net asp.net-mvc-3

我有一个非常简单的需求,但我无法弄清楚它是如何完成的

我有2个实体

  • 员工
  • 存储

员工与(DB)

等商店相关联
Employee_id, Store_id
1               1  
2               1

在索引视图中,我需要显示Store_nam e而不是StoreID。这是理想的“MVC”方式吗?我使用LINQ to SQL作为数据访问方法。

2 个答案:

答案 0 :(得分:1)

我假设您的模型属于IEnumerable<Employee>类型,并且您在foreach循环生成的表中显示它。

然后你应该能够做到这一点:

@foreach(var item in Model){
    Html.DisplayFor(modelItem => modelItem.Store.Store_name)
}

答案 1 :(得分:0)

您的视图应该与视图模型相关联,视图模型可以是可枚举的模型。但为了保持清洁,您的视图模型应该是对使用它的视图的自定义,并且不应该是您的Linq to SQL对象。因此,在这种情况下,您的View Model将具有StoreName属性。我没有测试任何这个,但它应该让你朝着正确的方向前进。

你的班级

public class EmployeeModel {
    [HiddentInput(DisplayValue=false)]
    public int EmployeeID { get;set; }

    [Display("Name = "Store")]
    public string StoreName { get;set; }    
}

你的行动

public ViewResult EmployeeDetails(int employeeId) {
        var model = new List<EmployeeModel>();

        foreach(var emp in Employees){
            model.Add(new EmployeeModel {
                          EmployeeID = emp.EmployeeID,
                          StoreName = emp.Store.StoreName
                      }); 
        }



        return View(model);
    }

这个观点非常简单。使用代码尝试确定商店的名称时,不需要使视图复杂化。

@model IEnumerable<EmployeeModel>

<h2>Details</h2>


<table>
    <thead>
        <tr>
            <th>EmployeeID</th>
            <th>Store Name</th>
        </tr>

    </thead>
    <tbody>
        @foreach(var emp in Model){
         <tr>
             <td>emp.EmployeeID</td>
             <td>emp.StoreName</td>
         </tr>
        }      
    </tbody>

</table>

如果这是您可以修改商店的员工的编辑页面,那么您可以使用选择列表。