MVC DisplayTemplate for Lookup列表

时间:2017-11-11 19:21:26

标签: asp.net-mvc lookup viewdata display-templates

我正在调用部分视图,我想要折叠一些下拉控件(之前使用DropDownListFor创建)。因为控件是只读的,所以我只需要在每个控件上显示选定的值。我在控制器中创建了一个名为“salutations”的列表,并将其作为ViewData传递给我的局部视图。在局部视图中,我需要使用@ Html.DisplayFor在我的div中看到所选的称呼(例如,Mr / Miss / Dr)。我尝试根据在线发布创建一个DisplayTemplate,但是我仍然遇到了让它运行的问题。

在控制器中声明如下的查找列表:

var salutations = (IEnumerable<lu_Salutation>)ViewData["salutations‌​"];

这是我的名为LookupList.cshtml的DisplayTemplate:

@model int
@using System.Linq
@vEmployee.SelectList1.Single(s => s.Value == Model.ToString()).Text

当然,上面代码的最后一行有问题。 vEmployee是我的模型的名称。我如何更正?,我可以使用GridForeignKey Kendo EditorTemplate这样的通用显示模板,这样我就可以轻松传递外键,DisplayTemplate和查找列表,只获得所显示的所选查找值的文本?

理想情况下,我只想在部分视图中使用:

@Html.DisplayFor(model => model.id, "LookupList", SelectList((IEnumerable)ViewData["salutationList"], "TitleID", "Title"))

其中TitleID和Title分别是查找列表中的值和文本。

模型

public class lu_Salutation 
{ 
    public int TitleID { get; set; } // e.g. 1 
    public string Title { get; set; } // e.g. Mrs 
}

ViewModel类 - 我想在这里使用ID,但在需要时显示查找表中的匹配文本(例如lu_Salutation)

public class vEmployee 
{ 
    [Key] 
    public int EmployeeID { get; set; } 
    public int SalutationID { get; set; } 
} 

控制器

[HttpGet] 
public ActionResult EmployeeDetails(int employeeID) 
{ 
    vEmployee SelectedEmployee = GetEmployees(employeeID).First(); 
    ViewData["salutations"] = _db.lu_Salutation.OrderBy(e => e.Title); 
    return PartialView("_EmployeeDetails", SelectedEmployee); 
} 

private IEnumerable<vEmployee>GetEmployees(int employeeID) 
{ 
    IEnumerable<vEmployee> emp = (from e in _db.Employees 
        join c in _db.Contacts on e.EmployeeID equals c.EmployeeID 
        join u in _db.lu_Salutation on c.SalutationID equals u.TitleID into sal 
        from u in sal.DefaultIfEmpty() 
        where (e.EmployeeID == employeeID)) 
        select new vEmployee 
        { 
            EmployeeID = e.EmployeeID, 
            SalutationID = c.SalutationID 
        }).AsEnumerable().OrderBy(m => m.EmployeeNumber).ThenBy(m => m.FirstName); 
    return emp; 
}

0 个答案:

没有答案