【问题标题】:How do I get to the properties of the view model in the view?如何在视图中获取视图模型的属性?
【发布时间】:2016-08-31 16:43:35
【问题描述】:

我需要在视图中访问视图模型的属性,因为我需要为 razor 中的某些内容分配一个值,但每次我键入 Model。它没有显示让我把属性放在它旁边。

这是我的代码:

@model PagedList.IPagedList<New_MinecraftNews_Webiste_MVC.Models.ArticlesViewModel>
@using PagedList.Mvc;
@{
    ViewBag.Title = Model.Images;
}

<h2>@Model.SelectedArticleType</h2>

@Model.SelectedArticleTypeViewBag.Title = Model.Images; 错误。

错误是:

严重性代码描述项目文件行抑制状态 错误 CS1061 IPagedList&lt;ArticlesViewModel&gt; 不包含 'Images' 的定义并且没有扩展方法 'Images' 接受 可以找到IPagedList&lt;ArticlesViewModel&gt; 类型的第一个参数 (您是否缺少 using 指令或程序集引用?)

这是我的控制器:

[Route("Articles/{at}")]
public ActionResult ArticleTypes(string at, int page = 1, int pageSize = 15)
{

    articleViewModel.Images = new List<ImageInfo>();
    var modelList = (from a in db.Articles
                     where a.SelectedArticleType == at
                     orderby a.Id descending
                     select new ArticlesViewModel
                     {
                         Id = a.Id,
                         Body = a.Body,
                         Headline = a.Headline,
                         PostedDate = a.PostedDate,
                         SelectedArticleType = a.SelectedArticleType,
                         UserName = a.UserName
                     }).ToList();


    foreach (var item in modelList)
    {
       item.Images = imageService.GetImagesForArticle(item.Id);
    }

    PagedList<ArticlesViewModel> model = new PagedList<ArticlesViewModel>(modelList, page, pageSize);


    return View(model);
}

Viewmodel 看起来像:

public class ArticlesViewModel
{
    public int Id { get; set; }

    public List<SelectListItem> ArticleType { get; set; }


    public string SelectedArticleType { get; set; }

    public string UserName { get; set; }
    [Required]
    public string Headline { get; set; }
    [Required]
    [DataType(DataType.MultilineText)]
    public string Body { get; set; }
    [DataType(DataType.Date)]
    public DateTime PostedDate { get; set; }

    public ImageInfo MainImage { get; set; }

    public List<ImageInfo> Images { get; set; }
}

【问题讨论】:

  • 你得到了什么确切的错误?你的控制器动作和视图模型是什么样的?
  • 确保将模型或模型本身的值传递给视图。最好也看到控制器内部的代码。
  • @RustamUmarov 控制器现在在那里
  • 在我做 displayfor 和 foreach 循环时工作

标签: c# asp.net-mvc razor


【解决方案1】:
@model PagedList.IPagedList<New_MinecraftNews_Webiste_MVC.Models.ArticlesViewModel>
@using PagedList.Mvc;
@{
    ViewBag.Title = "Page title goes here";
}

@foreach (var article in Model) {

    <h1>@article.Headline</h1>
    <h2>@article.SelectedArticleType</h2>

}

【讨论】:

    【解决方案2】:

    引用 PagedList 对象而不是接口

    @model PagedList<New_MinecraftNews_Webiste_MVC.Models.ArticlesViewModel>
    @using PagedList.Mvc;
    @using PagedList;
    

    PagedList 是一个列表。所以你必须访问子项

     @for (int i = 0; i < Model.Count(); i++)
     {
         @Html.DisplayFor(modelItem => Model[i].SelectedArticleType)
    
     }
    

    如果您需要页面上的一些“标题”类型信息以及与该标题信息关联的列表,您可能需要为列表创建部分视图并通过标题信息类的属性传递列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2022-01-14
      • 2017-07-24
      • 2019-12-24
      • 1970-01-01
      相关资源
      最近更新 更多