我有这个简单的控制器:
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:对象引用未设置为的实例 宾语。] 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 步,布尔&amp; completedSynchronously) 64
关于如何调试这个的任何想法?
答案 0 :(得分:3)
我已经在查看那篇文章了,发现了我遇到的错误(微妙但又很关键)。 如果使用Html.Hidden使用索引渲染隐藏字段,则帮助程序将“累积”以前的值,因此您最终将使用隐藏的说法index = 1,并且下一个说法索引= 1,2。
将帮助程序调用更改为手动编码的隐藏字段可解决此问题。
答案 1 :(得分:1)
如果没有看到更多代码以及表单的设置方式,我不确定能否回答。 但是,您可以查看有关Phil Haack's的Model Binding To A List博客文章。希望这会有所帮助。
答案 2 :(得分:1)
谢谢你修好了!
我替换了
<%= Html.Hidden("submitFormFields.index", controlID) %>
与
<input type="hidden" id="submitFormFields.index" name="submitFormFields.index" value="<%=controlID %>" />
我们是否应该将此报告为错误 - 为ASP.Net MVC RC1修复它会很好