我使用的是最新版本的Sitecore - 7.2(rev.140228)和最新版本的WFFM - 2.4 rev。 140923.所以问题是无论何时我尝试提交表单,无论我有什么样的保存操作,Sitecore都会抛出异常:
对象引用未设置为对象的实例。
描述:发生了未处理的异常。
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
堆栈追踪:
[NullReferenceException: Object reference not set to an instance of an object.]
Sitecore.Forms.Mvc.Controllers.ModelBinders.FormModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +571
System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +457
System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +152
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +641
一些其他信息。最新版本的WFFM支持MVC所以在这种情况下我使用cshtml布局。这是博客文章,其中描述了如何使用MVC - THIS尽管它适用于以前版本的SC,但它并不重要,并且该解决方案适用于最新版本。
答案 0 :(得分:10)
想想我有一个解决方案。
在使用Sitecore.Forms.MVC
反映ILSpy
类之后,使用我创建的控制器和模型绑定器版本进行了逆向工程和调试。
显然null
引用正在发生:
if (controllerContext.HttpContext.Request.RequestType == "POST" && formId != item.ID)
item
是null
。 item
设置在以前的行中:
Sitecore.Data.Items.Item item = RenderingContext.CurrentOrNull.PageContext.Database.GetItem(RenderingContext.CurrentOrNull.Rendering.DataSource);
渲染时数据源属性为空。如果您查看演示文稿详细信息,您会看到这是因为还有另一个字段用于指定您的表单ID。显然这看起来像Sitecore
个bug。但一个简单的解决方法是在呈现的表单ID和数据源属性中设置表单数据源。