我正在调用部分视图,我想要折叠一些下拉控件(之前使用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;
}