2016-04-01 11 views
0

私は私のMVC 5 Appでエラーが出ます:モデルタイプエラーとMVC IPagedList

CS1061:「IPagedListは」「TargetContact」の定義なし拡張メソッドが含まれていない「TargetContact」タイプの最初の引数を受け入れます「IPagedList」を見つけることができる(あなたがusingディレクティブまたはアセンブリ参照が不足している?)

を私はここで答えを見たが、私はまだそれは :(行われませんそれはおそらく解決するために非常に簡単です。

public ActionResult Index(string searchTargetContact = null, int page = 1) 
     { 
       var model = 
       from r in db.Outreach 
       orderby r.TargetContact descending 
       where (r.TargetContact.StartsWith(searchTargetContact) || searchTargetContact == null) 
       select new Models.OutreachSetListViewModel 
       { 
        TargetContact = r.TargetContact, 
        NextOutreachStep = r.NextOutreachStep, 
        GoalOfOutreach = r.GoalOfOutreach, 
            }; 
      model.ToPagedList(page, 10); 

return View(model); 

namespace WebApplication11.Models 
{ 
    public class OutreachSetListViewModel 
    { 
     public string NextOutreachStep { get; set; } 
     public string TargetContact { get; set; } 
     public string GoalOfOutreach { get; set; } 
    } 
} 

@model IPagedList<OutreachSetListViewModel> 
<table class="table" id="networkingList"> 
    <tr> 

     <th>@Html.DisplayNameFor(model => model.TargetContact)</th> 
     <th>@Html.DisplayNameFor(model => model.NextOutreachStep)</th> 
     <th>@Html.DisplayNameFor(model => model.GoalOfOutreach)</th> 
     <th></th> 
    </tr> 

    @foreach (var item in Model) 
    { 
     <tr> 
      <td>@Html.DisplayFor(modelItem => item.TargetContact)</td> 
      <td>@Html.DisplayFor(modelItem => item.NextOutreachStep)</td> 
      <td>@Html.DisplayFor(modelItem => item.GoalOfOutreach)</td> 
</tr> 
} 

答えて

1

ビュー内のモデルは0です。なので、モデルをループしているときは、各項目にTargetContactがあります。

ただし、ヘッダーを表示している場合、DisplayNameForのモデルは個々のアイテムではなく、そのリストです。リストにはTargetContactというプロパティがありませんので、リスト内のアイテムの1つから取得する必要があります。

この場合、リストに要素があるかどうかを確認し、存在する場合は、最初の要素からTargetContactを取得します。

@if(Model.Any()) 
{ 
    <tr> 

     <th>@Html.DisplayNameFor(model => model[0].TargetContact)</th> 
     <th>@Html.DisplayNameFor(model => model[0].NextOutreachStep)</th> 
     <th>@Html.DisplayNameFor(model => model[0].GoalOfOutreach)</th> 
     <th></th> 
    </tr> 
} 

コントローラ

あなたは値に保存model.ToPagedList(page, 10);

から返された値を使って何をやってビューにそれを渡していません。

var vm = model.ToPagedList(page, 10); 
return View(vm); 
+0

ありがとうございます!今度はプロパティを認識しますが、次のエラーが表示されます::辞書に渡されるモデルアイテムは 'System.Data.Entity.Infrastructure.DbQuery'1 [WebApplication11.Models.OutreachSetListViewModel]'タイプですが、この辞書にはモデルアイテムが必要です'PagedList.IPagedList'1 [WebApplication11.Models.OutreachSetListViewModel]'。 ' – user2675973

+1

私の応答を更新しました。 –

+0

それはそれだった!!!!!ありがとうございました!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! – user2675973

0

I私が遅れていることを知っていますが、もう一度私は今日この問題を段階的に解消していました。そして、同じ方法を使って解決しました。 IEnumerableはIEnumerableをIPagedListに置き換えたもので、魅力的に機能しました。