Quantcast
Viewing all articles
Browse latest Browse all 9076

XForm into Block giving error

The Error is: 

The model item passed into the dictionary is of type 'Castle.Proxies.XFormBlockProxy', but this dictionary requires a model item of type 'XXX.Models.ViewModels.XFormPageViewModel'.

at System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value)
at System.Web.Mvc.ViewDataDictionary.set_Model(Object value)
at System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary)
at System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData)
at System.Web.Mvc.WebViewPage.set_ViewData(ViewDataDictionary value)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at EPiServer.Web.Mvc.ViewExtensions.Render[T](IView view, ViewEngineResult viewEngineResult, ViewContext context, TextWriter writer, T data)
at EPiServer.Web.Mvc.MvcContentRenderer.HandleRenderTemplateWithViewEngine(HtmlHelper helper, IContentData contentData, TemplateModel templateModel)
at EPiServer.Web.Mvc.MvcContentRenderer.Render(HtmlHelper helper, PartialRequest partialRequestHandler, IContentData contentData, TemplateModel templateModel)
at XXX.Business.Rendering.ErrorHandlingContentRenderer.Render(HtmlHelper helper, PartialRequest partialRequestHandler, IContentData contentData, TemplateModel templateModel)

Here is my code:

XFormBlock.cshtml

@using EPiServer.Web.Mvc.Html
@model XXX.Models.ViewModels.XFormPageViewModel<div class="xformblock" @Html.EditAttributes(x => x.Schema)>
    @Html.ValidationSummary()
    @using (Html.BeginXForm(Model.Schema, new { Action = Model.ActionUri }))
    {
        Html.RenderXForm(Model.Schema);
    }</div>

 

XFormBlock.cs

using System.ComponentModel.DataAnnotations;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.DataAnnotations;
using EPiServer.XForms;
namespace GoConstruct.Models.Blocks
{
    [SiteContentType(GUID = "E6CE8FD6-DCA9-454C-B219-2C4D0DB9E17D",
       GroupName = Global.GroupNames.Phase1point5,
       DisplayName = "1.5 X-Form Block",
       Description = "Add a form to the site", Order = 37)]
    [SiteImageUrl("/Static/Gfx/blocks/form.jpg")]
    public class XFormBlock : SiteBlockData
    {
        [Display(
            GroupName = SystemTabNames.Content,
            Order = 1)]
        [CultureSpecific]
        public virtual string Heading { get; set; }
        [Display(
            GroupName = SystemTabNames.Content,
            Order = 2)]
        [CultureSpecific]
        public virtual XForm Schema { get; set; }
    }
}

 

XFormBlockController.cs

public class XFormBlockController : BaseBlockController<XFormBlock>
    {
        // GET: XFormBlock
       public override ActionResult Index(XFormBlock currentBlock)
        {
            var id = (currentBlock as IContent).ContentLink.ID;
            // ViewData is not automatically passed to a block controller, need to get it from TempData if it exists
            var viewDataKey = string.Format("TempViewData_{0}", id);
            if (this.TempData[viewDataKey] != null)
            {
                this.ViewData = (ViewDataDictionary)this.TempData[viewDataKey];
            }
            // Create the viewmodel
            var viewModel = new XFormPageViewModel(currentBlock, EpiServerDependencies)
            {
                Schema = currentBlock.Schema,
                Heading = currentBlock.Heading
            };
            var pageRouteHelper = ServiceLocator.Current.GetInstance<PageRouteHelper>();
            PageData currentPage = pageRouteHelper.Page;
            // Create postback url
            if (viewModel.Schema != null && currentPage != null)
            {
                var urlResolver = ServiceLocator.Current.GetInstance<UrlResolver>();
                var pageUrl = urlResolver.GetVirtualPath(currentPage.ContentLink);
                var actionUrl = string.Format("{0}XFormPost/", pageUrl);
                actionUrl = UriSupport.AddQueryString(actionUrl, "XFormId", viewModel.Schema.Id.ToString());
                actionUrl = UriSupport.AddQueryString(actionUrl, "failedAction", "Failed");
                actionUrl = UriSupport.AddQueryString(actionUrl, "successAction", "Success");
                actionUrl = UriSupport.AddQueryString(actionUrl, "contentId", id.ToString());
                viewModel.ActionUri = actionUrl;
            }
            var editHints = this.ViewData.GetEditHints<XFormPageViewModel, XFormBlock>();
            editHints.AddConnection(v => v.Schema, p => p.Schema);
            return this.PartialView(viewModel);
        }
    }

XFormPageViewModel.cs

 

using EPiServer.XForms;
using XXX.Models.Blocks;
using XXX.Models.ViewModels.Base;
using JonDJones.Com.Core;
public class XFormPageViewModel : BlockViewModel<XFormBlock>
    {
        public XFormPageViewModel(XFormBlock currentBlock, IEpiServerDependencies epiServerDependencies)
           : base(currentBlock, epiServerDependencies)
        {
        }
        public XForm Schema { get; set; }
        public string ActionUri { get; set; }
        public string Heading { get; set; }
    }

 

Can you let me know if you can see where I am going wrong?

 

Many thanks

Jon


Viewing all articles
Browse latest Browse all 9076

Trending Articles