传递到字典中的模型项在ASP.net MVC中的类型为&System; Colol.Generic.List ...

时间:2017-12-10 11:57:49

标签: asp.net asp.net-mvc asp.net-mvc-5

我试图建立民意调查系统但有一些问题。 我必须通过ADO.NET Entity Framework生成它 其次,我创建了Repository类,以便从我的控制器类中使用它 我在PollController类中创建了ActionResult方法,它从我的数据库返回所有池问题。

我有一个粒子视图我创建它以显示特定问题的选项 当我把这个粒子放在我的Index.cshtml中时,它给了我这个错误传入字典的模型项的类型是' System.Collections.Generic.List

这是我的代码 Poll.cs

public partial class Poll
    {
        public Poll()
        {
            this.PollOptions = new HashSet<PollOption>();
        }

        public int PollID { get; set; }
        public Nullable<System.DateTime> AddedDate { get; set; }
        public string AddedBy { get; set; }
        public string QuestionText { get; set; }
        public bool IsCurrent { get; set; }
        public bool IsArchived { get; set; }

        public virtual ICollection<PollOption> PollOptions { get; set; }
    }

PollOption.cs

public partial class PollOption
    {
        public int OptionID { get; set; }
        public Nullable<System.DateTime> AddedDate { get; set; }
        public string AddedBy { get; set; }
        public string OptionText { get; set; }
        public int PollID { get; set; }
        public Nullable<int> Votes { get; set; }

        public virtual Poll Poll { get; set; }
    }

PollRepository.cs

public class PollRepository
    {
        private PollPlatFormEntities entities = new PollPlatFormEntities();

        public IQueryable<Poll> GetPolls()
        {
            return entities.Polls;
        }

        public Poll GetPoll(int Id)
        {
            return entities.Polls.FirstOrDefault(p => p.PollID == Id);
        }

        public IQueryable<Poll> CurrentPoll()
        {
            return entities.Polls.Where(c => c.IsCurrent == true);
        }

        public PollOption GetPollOption(int Id)
        {
            return entities.PollOptions.FirstOrDefault(o => o.OptionID == Id);
        }

PollController.cs

public class PollsController : Controller
    {
        PollRepository pollRepository = new PollRepository();
        //
        // GET: /Polls/
        public ActionResult Index()
        {
            var polls = pollRepository.GetPolls().ToList();
            return View(polls);
        }
}

这是我的index.cshtml查看

@model IEnumerable<PollSystem.Models.Poll>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.QuestionText)
            @Html.Partial("PollItem") 
        </td>
    </tr>
}

,最后是我的粒子视图

@model PollSystem.Models.Poll

<div id="poll-@Model.PollID" class="poll">
    <h2>@Model.QuestionText</h2>

    @using (Html.BeginForm(FormMethod.Post))
    {
        <ul class="poll-options">
            @foreach (var option in Model.PollOptions)
            {
                <li class="option" id="option-@option.OptionID">
                    <input type="radio" id="option-@option.OptionID" value="@option.OptionID"/>
                    <label class="text" for="option-@option.OptionID">
                        @option.OptionText
                    </label>
                </li>
            }
        </ul>
        <button type="submit" name="poll-submit">Vote</button>
    }
</div>

2 个答案:

答案 0 :(得分:0)

如果未将模型显式传递给局部视图,它将使用父视图的模型,从该模型调用局部视图。在您的情况下,您没有将任何模型传递给局部视图方法调用,因此它使用父页面的模型IEnumerable<PollSystem.Models.Poll>作为局部模型。

使用Partial方法的此重载,该方法将局部视图的模型作为第二个参数

public static MvcHtmlString Partial(
    this HtmlHelper htmlHelper,
    string partialViewName,
    object model
)

因此,在主视图中,您可以将item变量传递给部分调用

@model IEnumerable<PollSystem.Models.Poll>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.Partial("PollItem",item) 
        </td>
    </tr>
}

答案 1 :(得分:0)

请尝试

 @model IEnumerable<PollSystem.Models.Poll>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.QuestionText)
            @Html.Partial("PollItem",item) 
        </td>
    </tr>
}