我试图建立民意调查系统但有一些问题。 我必须通过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>
答案 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>
}