Copied to clipboard

Flag this post as spam?

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


  • bh 291 posts 976 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 291 posts 976 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!

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies