我在MVC 5应用程序中收到错误:
CS1061:' IPagedList'不包含' TargetContact'的定义并没有扩展方法' TargetContact'接受类型' IPagedList'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
我在这里看到了答案,但我仍然没有完成它:( 它可能很容易解决。
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>
}
答案 0 :(得分:2)
视图中的模型是IPagedList<OutreachSetListViewModel>
,因此当您在模型中循环时,每个项目都有TargetContact
。
但是,当您显示标题时,DisplayNameFor
的模型不是单个项目,而是列表。该列表没有TargetContact
属性,因此我们必须从列表中的一个项目中获取它。
在这种情况下,我们检查列表中是否有任何元素,如果有,请从第一个元素中获取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);
答案 1 :(得分:0)
我知道我已经迟到了,但是我今天正在逐步解决这个问题并通过使用与IEnumerable相同的方法来解决所有我用IPagedList替换IEnumerable并且它就像一个魅力。
public static string DisplayNameFor<TModelItem, TResult>(this IHtmlHelper<IEnumerable<TModelItem>> htmlHelper, Expression<Func<TModelItem, TResult>> expression)
{
if (htmlHelper == null)
throw new ArgumentNullException(nameof(htmlHelper));
if (expression == null)
throw new ArgumentNullException(nameof(expression));
return htmlHelper.DisplayNameForInnerType(expression);
}
public static string DisplayNameFor<TModelItem, TResult>(this IHtmlHelper<IPagedList<TModelItem>> htmlHelper, Expression<Func<TModelItem, TResult>> expression)
{
if (htmlHelper == null)
throw new ArgumentNullException(nameof(htmlHelper));
if (expression == null)
throw new ArgumentNullException(nameof(expression));
return htmlHelper.DisplayNameForInnerType(expression);
}