Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • bh 405 posts 1382 karma points
    Oct 23, 2019 @ 18:43
    bh
    0

    Help with Surface Controller

    I have a page that loads the last 12 months of press releases. At the bottom is a button that attempts to append the 6 prior press releases via ajax.

    I'm getting this error when my Surface Controller returns my Partial View. Cannot bind source type myproject.Models.ccPressOlder to model type Umbraco.Web.Models.RenderModel.

    My architecture is thus:

    • View named Media.cshtml
    • Partial view named ccPress.cshtml (loads 12 months of press)
    • Partial view named ccPressOlder.cshtml
    • JavaScript main.js does the ajax bit
    • Surface controller PartialViewController.cs
    • Model named ccPressOlder.cs for strongly typing the content sent to my partial view named ccPressOlder.cshtml

    ccPress.cshtml

    <div class="d-block mx-auto text-center news-btn">
        <a href="#" id="btnPressLoadMore" class="btn green d-inline-block mx-auto">LOAD MORE <i class="fas fa-caret-right"></i></a>
        <div id="ccPressOlderContent"></div>
        <input type="hidden" id="hidNodeID" value="@UmbracoContext.Current.PageId" />
    </div>
    

    main.js

    $(function () {
        $('#btnPressLoadMore').click(function(e) {
            e.preventDefault();
            var oldCount = $('.desktop .story').length;
            var oldPressUrl = '/umbraco/surface/PartialView/Index?name=ccPressOlder&counter=' + oldCount + '&id=' + $('#hidNodeID').val()
            $.ajax({
                url: oldPressUrl,
                type: 'GET',
                cache: false,
                success: function (data) {
                    console.log('getting older press step 2');
                    $('#ccPressOlderContent').html(data);
                }
            });
        });
    });
    

    ccPressOlder.cs

    namespace myproject.com.Models
    {
        public class ccPressOlder
        {
            public IEnumerable<IPublishedContent> OlderPressList { get; set; }
        }
    }
    

    PartialViewController.cs

    namespace myproject.Controllers
    {
        public class PartialViewController : SurfaceController
        {
            public ActionResult Index(string name, Int32 counter, Int32 id)
            {
                var page = Umbraco.TypedContent(id);                            
                var oneYearAgo = DateTime.Today.AddYears(-1);
                var pressList = page.Children.Where(x => x.GetPropertyValue<DateTime>("newsDetailDate") < oneYearAgo).Where(x => x.IsVisible()).Skip(counter).Take(6).OrderByDescending(x => x.GetPropertyValue<DateTime>("newsDetailDate"));
                var oldPressList = new myproject.Models.ccPressOlder { OlderPressList = pressList } ;
                return PartialView(name, oldPressList);
            }
        }
    }
    

    ccPressOlder.cshtml

    @{ 
        var myOlderPressList = Model.Content.GetPropertyValue<IEnumerable<IPublishedContent>>("OlderPressList");
    }
    <div class="row no-gutters d-none d-sm-block desktop">
        @foreach (var press in myOlderPressList)
        {
            @*markup goes here*@
        }
    </div>
    
  • Jonathan Distenfeld 105 posts 618 karma points
    Oct 24, 2019 @ 05:45
    Jonathan Distenfeld
    100

    Hi bh,

    try updating your ccPressOlder.cshtml to following:

    @model myproject.Models.ccPressOlder
    @{ 
        var myOlderPressList = Model.OlderPressList;
    }
    <div class="row no-gutters d-none d-sm-block desktop">
        @foreach (var press in myOlderPressList)
        {
            @*markup goes here*@
        }
    </div>
    

    ~ Jonathan

  • bh 405 posts 1382 karma points
    Oct 24, 2019 @ 13:18
    bh
    0

    @JonathanDistenfeld a million thanks for wading through my long OP and coming up with the spot-on solution!!! Can't thank you enough you were 100% correct! Thank you!

Please Sign in or register to post replies

Write your reply to:

Draft