2017-12-10 5 views
-1

私は投票システムを作成しようとしていますが、問題があります。 私は、ADO.NET Entity Frameworkでクラスを生成する必要があります 2番目はコントローラクラスからリポジトリクラスを作成するために作成します 私のデータベースからPool Questionsを返すPollControllerクラスにActionResultメソッドを作成します。私は一つの粒子ビューは、私が辞書に渡されるモデルアイテムはタイプ「にSystem.Collectionsである私は私のIndex.cshtmlでこの粒子を入れたとき、それは私にこのエラーを与える特定の質問 のためのオプションを表示するには、それを作成する必要があり辞書に渡されたモデル項目は、 'System.Collections.Generic.List ... in ASP.net MVC

.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="[email protected]" 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="[email protected]"> 
        <input type="radio" id="[email protected]" value="@option.OptionID"/> 
        <label class="text" for="[email protected]"> 
         @option.OptionText 
        </label> 
       </li> 
      } 
     </ul> 
     <button type="submit" name="poll-submit">Vote</button> 
    } 
</div> 

答えて

0

明示的に部分図にモデルを渡さない場合、それは部分的なビューが呼び出される親ビューのモデルを使用します。あなたのケースでは、パーシャルビューメソッド呼び出しにどのモデルも渡していないので、部分ページのモデルとしてIEnumerable<PollSystem.Models.Poll>の親ページのモデルを使用しています。

使っだからあなたのメインビューで、あなたは部分的なコール

@model IEnumerable<PollSystem.Models.Poll> 
@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.Partial("PollItem",item) 
     </td> 
    </tr> 
} 
item変数を渡すことができます2番目のパラメータとして

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

の部分図のモデルを取るPartial方法のこのオーバーロード

+0

ありがとうございました。 lanationはより便利です – Mohammed

0

試してみてください

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