У меня есть такой простой контроллер:
public class OneController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Create()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(IList<TestModel> m)
{
return View(m);
}
}
И очень простое представление с двумя правильно проиндексированными объектами типа TestModel. Когда я отправляю форму с недопустимыми данными, я получаю представление с выделенными ошибками. Однако, когда я повторно отправляю его (ничего не меняя), я получаю эту ошибку:
[NullReferenceException: Object reference not set to an instance of an object.] System.Web.Mvc.DefaultModelBinder.UpdateCollection(ModelBindingContext bindingContext, Type itemType) +612 System.Web.Mvc.DefaultModelBinder.BindModelCore(ModelBindingContext bindingContext) +519 System.Web.Mvc.DefaultModelBinder.BindModel(ModelBindingContext bindingContext) +829 System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ParameterInfo parameterInfo) +313 System.Web.Mvc.ControllerActionInvoker.GetParameterValues(MethodInfo methodInfo) +399 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +232 System.Web.Mvc.Controller.ExecuteCore() +152 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +86 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +28 System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +332 System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +55 System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +28 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64
Есть идеи, как это отладить?





Не уверен, что смогу ответить, не увидев больше кода и настройки вашей формы.
Но вы можете взглянуть на запись в блоге Фил Хаак о Привязка модели к списку.
Надеюсь, это поможет.
Я уже просматривал эту статью и обнаружил ошибку (незначительную, но критическую). Если вы визуализируете скрытое поле с индексом с помощью Html.Hidden, помощник будет «накапливать» предыдущие значения, так что вы получите скрытый индекс выражения = 1, а следующий индекс выражения = 1,2.
Изменение вызова помощника на вручную закодированное скрытое поле устранило проблему.
Спасибо, что исправили!
Я заменил
<%= Html.Hidden("submitFormFields.index", controlID) %>
с
<input type = "hidden" id = "submitFormFields.index" name = "submitFormFields.index" value = "<%=controlID %>" />
Если мы сообщаем об этом как об ошибке - было бы неплохо исправить это для ASP.Net MVC RC1
Хм, все еще проблема в MVC 4
Полезно знать, спасибо, что разместили свое решение, держу пари, это поможет другим, кто столкнется с той же проблемой.