【问题标题】:'IEnumerable<>' does not contain a definition for '' and no extension method '' accepting a first argument of type 'IEnumerable<>' could be found“IEnumerable<>”不包含“”的定义,并且找不到接受“IEnumerable<>”类型的第一个参数的扩展方法“”
【发布时间】:2015-11-21 08:39:10
【问题描述】:

我想创建如下图所示的在线论坛



这是我的控制器方法

public ActionResult Discussion_Preview()
{

    int Discussion_ID = 1;


   var discussion_preview = (from d in db.AB_Discussion
                              where d.Discussion_ID == Discussion_ID
                              join dc in db.AB_DiscussionComments on d.Discussion_ID equals dc.Discussion_ID
                              join user_discussion in db.AspNetUsers on d.CreatedBy equals user_discussion.Id
                              join user_comments in db.AspNetUsers on dc.CreatedBy equals user_comments.Id
                              select new DiscussionPreview_Model
                              {
                                Disussion_ID = d.Discussion_ID,
                                Discussion_CreateDate = d.CreatedDate,
                                Discussion_CreateBy = user_discussion.UserName,
                                Discussion_Title = d.Discussion_Name,
                                Discussion_Description = d.Discription,
                                Comment_ID = dc.Comment_ID,
                                Comment_Description = dc.Comment_Discription,
                                Comment_CreateDate = dc.CreatedDate,
                                Comment_CreateBy = user_comments.UserName

                              });



    return View(discussion_preview);
}

模型类

public class DiscussionPreview_Model
{
    public int Disussion_ID { get; set; }
    public Nullable<System.DateTime> Discussion_CreateDate { get; set; }
    public string Discussion_CreateBy { get; set; }
    public string Discussion_Title { get; set; }
    public string Discussion_Description { get; set; }

    public int Comment_ID { get; set; }
    public Nullable<System.DateTime> Comment_CreateDate { get; set; }
    public string Comment_CreateBy { get; set; }
    public string Comment_Description { get; set; }

}

查看页面

@model IEnumerable<prjct.Models.DiscussionPreview_Model>

@{
    ViewBag.Title = "Discussion_Preview";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

 <h3>@Html.DisplayFor(model => model.Discussion_Title)</h3>

<div>@Html.DisplayFor(model => model.Discussion_Description)</div>
<div>@Html.DisplayFor(model => model.Discussion_CreateDate)  @Html.DisplayFor(model => model.Discussion_CreateDate)</div>

@foreach (var item in Model)
{

    <fieldset>
        <legend></legend>

        <h4>Comments</h4>
        <div class="display-field">@item.Comment_Description</div>
        <div class="display-field">@item.Comment_CreateBy : @item.Comment_CreateDate </div>

    </fieldset>
}

当调试上面的应用程序时,我收到以下错误消息

“IEnumerable”不包含“Discussion_Title”的定义,并且找不到接受“IEnumerable”类型的第一个参数的扩展方法“Discussion_Title”(您是否缺少 using 指令或程序集引用?)

【问题讨论】:

  • 您的DisplayFor() 助手需要在foreach 循环内。但我最好的猜测是,您真正想要做的是显示 DiscussionPreview_Model 以及与之关联的所有 cmets 的集合?
  • 但只有我一个讨论标题和讨论描述
  • 不,你没有,你有一个收藏(IEnumerable 就是这样)
  • 但我想显示一个讨论标题和讨论描述,然后循环 cmets,我该怎么做?
  • 那么你需要重新设计你的模型。您需要TitleDescription 等属性和IEnumerable&lt;Comment&gt; Comments,其中Comment 包含CreateByDescription 等属性

标签: c# asp.net-mvc linq asp.net-mvc-3 razor


【解决方案1】:

您的模型是IEnumerable&lt;prjct.Models.DiscussionPreview_Model&gt; 类型,而您正尝试像prjct.Models.DiscussionPreview_Model 一样使用它,但这是行不通的。您必须循环 IEnumerable,然后对 IEnumerable 中的每个元素使用 Html.DisplayFor,就像您在 cmets 部分中所做的那样。

【讨论】:

  • '@model IEnumerable' 重命名为'@model prjct.Models.DiscussionPreview_Model'
【解决方案2】:

你正在尝试使用 as

<h3>@Html.DisplayFor(model => model.Discussion_Title)</h3>

但是这里你的模型是 IEnumerable,所以你有两个选择。

选项 1

如果您确定所有记录的 Discussion_Title、Discussion_Description 和 Discussion_CreateDate 相同,那么您必须使用 as

<h3>@Html.DisplayFor(model => model.ElementAt<DiscussionPreview_Model>(0).Discussion_Title)</h3>

与其他 2 列相同,但在这种情况下,必须至少有一条记录,否则您必须在使用前检查记录数。

选项 2

尝试以喜欢的方式创建模型

public class Discssion
{
    public string Discussion_Title { get; set; }
    public string Discussion_Description { get; set; }
    public string Comment_CreateBy { get; set; }
    public List<DiscussionPreview> DiscussionPreviews{ get;set;}
}

public class DiscussionPreview
{
    public class Comment_Description{ get; set; }
    .....
}

并在您的视图中以相同的方式使用它。

让我知道您需要更多详细信息。

【讨论】:

  • 谢谢。我尝试了你的两个选项似乎都不起作用
  • 'IEnumerable&lt;DiscussionPreview_Model&gt;' does not contain a definition for 'Discussion_Title' and no extension method 'Discussion_Title' accepting a first argument of type 'IEnumerable&lt;DiscussionPreview_Model&gt;' could be found (are you missing a using directive or an assembly reference?)
  • 请输入具有完整路径的类 (IEnumerable)--> IEnumerable.DiscussionPreview_Model> 如果您仍然遇到任何问题,请告诉我
  • 它的存在方式,完整路径:((
  • 对我来说 @Html.DisplayFor(m=>m.ElementAt(0).Di​​scussion_Title) 正在工作
猜你喜欢
  • 2019-07-29
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多