ASP.NET MVC验证问题

时间:2008-11-06 16:18:10

标签: asp.net-mvc

我有这个简单的控制器:

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

关于如何调试这个的任何想法?

3 个答案:

答案 0 :(得分:3)

我已经在查看那篇文章了,发现了我遇到的错误(微妙但又很关键)。 如果使用Html.Hidden使用索引渲染隐藏字段,则帮助程序将“累积”以前的值,因此您最终将使用隐藏的说法index = 1,并且下一个说法索引= 1,2。

将帮助程序调用更改为手动编码的隐藏字段可解决此问题。

答案 1 :(得分:1)

如果没有看到更多代码以及表单的设置方式,我不确定能否回答。 但是,您可以查看有关Phil Haack'sModel 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修复它会很好