MVC 4 Razor - 使用DisplayFor而不是ID显示字典中的名称

时间:2013-02-17 16:08:19

标签: c# razor asp.net-mvc-4 displayfor

我正在使用MVC4 Razor渲染一个简单的网页,并想知道是否有一种简单的方法可以使用DisplayFor渲染“已翻译”的值,而不是显示模型的ID值。

型号:

public class Property
{
    [Key]
    public int Rec_Id { get; set; }
    public string Name  { get; set; }
    public int TypeId  { get; set; }
}

public class Type
{
    public int TypeId  { get; set; }
    public string TypeName  { get; set; }
}

控制器:

public ActionResult Index()
{
    PropertyContext db = new PropertyContext();
    Property model = db.Property.Find(94284);
    ViewBag.cmbType = db.Type.ToList();
    return View(model);
}

查看

<div class="display-field">
    @Html.DisplayFor(ViewBag.Type => ViewBag.Type.Find(model.Type).TypeName)
</div>

1 个答案:

答案 0 :(得分:0)

我建议您使用视图模型,因为您的域模型不适合您需要显示类型名称的视图要求:

public class MyViewModel
{
    public int RecId { get; set; }
    public string Name  { get; set; }
    public string TypeName { get; set; }
}

然后让控制器操作通过执行INNER JOIN填充此视图模型并将其传递给视图:

public ActionResult Index()
{
    using (PropertyContext db = new PropertyContext())
    {
        var query = 
            from prop in db.Property.Find(94284)
            join type in db.Type on prop.TypeId equals type.TypeId
            select new MyViewModel
            {
                RecId = prop.Rec_Id,
                Name = prop.Name,
                TypeName = type.TypeName
            };

        var viewModel = query.FirstOrDefault();
        return View(viewMode);
    }
}

最后,您的视图将强烈输入到视图模型中,您将拥有要显示的所有必要信息:

@model MyViewModel
...
<div class="display-field">
    @Html.DisplayFor(model => model.TypeName)
</div>