我有以下PagedListModel:
public class PagedClientViewModel
{
public int? Page { get; set; }
public PagedList.IPagedList<ClientViewModel> Clients { get; set; }
}
public class ClientViewModel
{
public string ClientNumber { get; set; }
public bool UseThisClient{ get; set; }
}
我的观点如下:
@using (Html.BeginForm("Index", "Home", FormMethod.Get, new { id = "Form" }))
{
@foreach (var item in Model.Clients)
{
@Html.DisplayFor(modelItem => item.ClientNumber)
@Html.CheckBoxFor(modelItem => item.UseThisClient)
}
@Html.HiddenFor(model => model.Clients)
}
控制器操作:
public ActionResult Index(PagedClientViewModel model)
{
//...process all clients in the list
}
我想将模型发布回控制器,以便我可以处理已勾选的复选框,但是我收到以下错误:我有点明白错误是因为我回发了一个界面但我不能找到解决办法。我怎样才能完成这项工作?
无法创建接口的实例。在 System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,布尔值 publicOnly,Boolean noCheck,Boolean&amp; canBeCached, RuntimeMethodHandleInternal&安培; ctor,布尔&amp; bNeedSecurityCheck)at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache,StackCrawlMark&amp; stackMark)at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis,Boolean fillCache,StackCrawlMark&amp; stackMark)
在System.Activator.CreateInstance(Type type,Boolean nonPublic)
在System.Activator.CreateInstance(Type type)at System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext,ModelBindingContext bindingContext,Type modelType) 在System.Web.Mvc.DefaultModelBinder.BindSimpleModel(ControllerContext) controllerContext,ModelBindingContext bindingContext, ValueProviderResult valueProviderResult)at System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)at System.Web.Mvc.DefaultModelBinder.GetPropertyValue(ControllerContext controllerContext,ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor,IModelBinder propertyBinder)
在System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext,ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)at System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext,ModelBindingContext bindingContext)at System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext,ModelBindingContext bindingContext,Object model)
在 System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext,ModelBindingContext bindingContext)at System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)at System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext,ParameterDescriptor parameterDescriptor)at System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext,ActionDescriptor actionDescriptor)at System.Web.Mvc.Async.AsyncControllerActionInvoker&LT;&GT; C_ DisplayClass25.b _1e(的AsyncCallback asyncCallback,Object asyncState)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.Begin(AsyncCallback callback, Object state, Int32 timeout) at System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult
1.Begin(的AsyncCallback 回调,对象状态,Int32超时)at System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback回调, 对象状态) System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.Begin(AsyncCallback callback, Object state, Int32 timeout) at System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult
1.Begin(的AsyncCallback 回调,对象状态,Int32超时)at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback回调,对象状态)at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback回调,对象状态) System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext的 context,AsyncCallback cb,Object extraData)at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤, 布尔和放大器; completedSynchronously)
答案 0 :(得分:9)
解决此问题的方法是将分页元数据作为单独的属性传递,并在视图中重建IPagedList。如下所示
public class PagedClientViewModel
{
public int? Page { get; set; }
public List<ClientViewModel> Clients { get; set; }
public IPagedList PagingMetaData { get; set; }
}
创建元数据
pagedClientViewModel.PagingMetaData = new StaticPagedList<ClientViewModel>(pagedClientViewModel.Clients, pageIndex, pageSize, TotalClients).GetMetaData();
在视图中构建寻呼机
<div style="text-align: center">
@Html.PagedListPager(new StaticPagedList<ClientViewModel>(Model.Clients, Model.PagingMetaData), page => Url.Action("<actionname>", new { page }), PagedListRenderOptions.Classic)
</div>