2

也许这很简单,但是当我在 stackoverflow 或谷歌上搜索时,我找不到好词。

我有一个模型,这个模型包含一个整数的“国家”属性。当我在编辑视图中时,此属性以这种方式使用并且运行良好。

@Html.DropDownListFor(model => model.Country, new SelectList(ViewBag.Countries, "IDCountry", "Name"))   

在详细信息视图中,我只想显示国家/地区的名称,但我不知道如何!现在,我正在这样做,但它只显示 ID,我找不到给他列表的方法,所以它将它用作数据源或类似的东西来显示“加拿大”而不是 42。

@Html.DisplayFor(model => model.Country)

如何做到这一点?

4

1 回答 1

3

如何做到这一点?

当然通过使用视图模型:

public class CountryViewModel
{
    public int CountryId { get; set; }
    public string CountryName { get; set; }
}

然后您将在应该呈现您的显示视图的控制器操作中填充此视图模型:

public ActionResult Display(int id)
{
    Country country = ... go and fetch from your db the corresponding country from the id

    // Now build a view model:
    var model = new CountryViewModel();
    model.CountryId = country.Id;
    model.CountryName = country.Name;

    // and pass the view model to the view for displaying purposes
    return View(model);
}

现在您的视图将被强类型化到视图模型中:

@model CountryViewModel
@Html.DisplayFor(x => x.CountryName)

因此,正如您在 ASP.NET MVC 中看到的,您应该始终使用视图模型。考虑在给定视图中需要使用哪些信息,您应该做的第一件事是定义视图模型。然后,为视图提供服务的控制器操作负责填充视图模型。这个视图模型的值来自哪里并不重要。将视图模型视为许多数据源的单一聚合点。

就观点而言,它们应该尽可能地愚蠢。只需使用视图模型中可用的内容。

于 2013-01-13T17:04:24.700 回答