2014-01-06 286 views
2

我有这样一个模型:迭代通过MultiSelectList

public class ArticleWriter_ViewModel 
{ 
    public int MagId { get; set; } 
    public string MagNo { get; set; } 
    public string TitleIds { get; set; } 
    public MultiSelectList Articles { get; set; } 
    public int[] SelectedArticles { get; set; } 
} 

我填的文章是这样的:

ArticleWriter_ViewModel viewModel = new ArticleWriter_ViewModel(); 
     Func<IQueryable<NumberTitle>, IOrderedQueryable<NumberTitle>> orderByFunc = null; 
     Expression<Func<NumberTitle, bool>> filterExpr = null; 
     if (id > 0) 
     { 
      filterExpr = p => p.MagazineId.Equals(id); 
     } 
     var wholeTitles = unitOfWork.NumberTitleRepository.Get(filterExpr, orderByFunc, "Magazine,Title").ToList(); 

然后通过它来查看。在一些视图中,我在DropDownListFor中显示文章,但在其他人希望显示在DisplayFor.how中,我是否可以遍历文章以在DisplayFor中显示?

+0

http://www.hanselman.com/blog/ASPNETMVCDisplayTemplateAndEditorTemplatesForEntityFrameworkDbGeographySpatialTypes。 aspx也许你需要一个显示模板 – chenZ

+0

你能给我一些关于它的更多信息吗? – nnmmss

+0

如果你想使用Html.DisplayFor(x => x.PropertyName),该属性是一个复杂的类型,添加一个属性[UIHit]并创建一个显示模板,只需看看hanselman的博客 – chenZ

回答

0

在项目中创建的Views\DisplayTemplates目录名为ArticleWriter_ViewModel.cshtml像这样(剃刀语法)显示模板(如果有必要创建文件夹):

@model ArticleWriter_ViewModel 
@foreach (NumberTitle article in Model) 
{ 
    @Html.DisplayFor(article => article.Title) 
} 

您可以更改DisplayFor表达式中引用属性和/或者添加一个表达式来根据需要过滤文章列表。

如果你想给显示模板不同的名称,使用的型号名称UIHint注释指定模板名称:

[UIHint("MyTemplate")] 
public class ArticleWriter_ViewModel 
{...}