More in this section
Forums / Project Feather / Extend widget not fully possible for Profile widget

Extend widget not fully possible for Profile widget

The forums are in read-only mode. In case that you want to directly contact the Progress Sitefinity team use the support center. In our Google Plus group you can find more than one thousand Sitefinity developers discussing different topics. For the Stack Overflow threads don’t forget to use the “Sitefinity” tag.
2 posts, 0 answered
  1. Kevin
    Kevin avatar
    0 posts
    Registered:
    13 Jun 2016
    30 Jun 2017
    Link to this post

    I was following the following link http://docs.sitefinity.com/feather-extend-the-navigation-widget-model
    Because I need some extra attributes on the profile page to be saved to a custom database but I noticed most methods on the models are not marked as virtual so I can not override them use my custom implementation is this intended?

    Example code:

    PortalProfileModel

    public class PortalProfileModel : ProfileModel
    {
        public PortalProfileModel() : base()
        {
     
        }
     
        public ProfilePreviewViewModel GetProfilePreviewViewModel()
        {
            if (this.SelectedUserProfiles == null || this.SelectedUserProfiles.Count == 0)
                return null;
     
            var viewModel = new PortalProfilePreviewViewModel(this.SelectedUserProfiles)
            {
                CssClass = this.CssClass,
                CanEdit = this.CanEdit()
            };
     
            return viewModel;
        }
    }

    PortalProfilePreviewViewModel

    public class PortalProfilePreviewViewModel: ProfilePreviewViewModel
       {
           /// <summary>
           /// Initializes a new instance of the <see cref="ProfilePreviewViewModel"/> class.
           /// </summary>
           public PortalProfilePreviewViewModel() : base()
           {
           }
     
           /// <summary>
           /// Initializes a new instance of the <see cref="ProfilePreviewViewModel"/> class.
           /// </summary>
           /// <param name="userProfile">The user profile.</param>
           public PortalProfilePreviewViewModel(IList<UserProfile> userProfiles) : base(userProfiles)
           {
               if (userProfiles != null && userProfiles.Count() > 0)
               {
                   this.InitializeUserRelatedData(userProfiles.First().User);
               }
           }
     
           public bool MailBinEmptiedNotification { get; set; }
           public bool MailDoorOpenNotification { get; set; }
           public bool MailHatchOpenNotification { get; set; }
           public bool MailBinIsFullNotification { get; set; }
           public bool MailBinAlmostFullNotification { get; set; }
     
           /// <summary>
           /// Initializes the user related data.
           /// </summary>
           /// <param name="user">The user.</param>
           private void InitializeUserRelatedData(User user)
           {
               MailBinAlmostFullNotification = true;
               MailDoorOpenNotification = true;
           }
       }

    Read.ProfilePreview.cshtml

    @model ECOnXWebApp.Mvc.Models.Profile.PortalProfilePreviewViewModel
    @using Telerik.Sitefinity.Frontend.Identity.Mvc.Models.Profile;
    @using Telerik.Sitefinity.Frontend.Mvc.Helpers;
     
    <div class="@Model.CssClass">
        <form class="form-horizontal col-sm-10">
            <div class="row">
                <h3>@Model.DisplayName</h3>
                <p>@Model.Email</p>
     
                <div class="form-group">
                    <label class="control-label col-sm-3" for="email">Mail almost full notification</label>
                    <div class="col-sm-8">
                        <div class="checkbox">
                            <label><input type="checkbox">@Model.MailBinAlmostFullNotification</label>
                        </div>
                    </div>
                </div>
                @if (Model.CanEdit && ViewBag.Mode == ViewMode.Both)
                {
                    <div class="form-group">
                        <div class="col-sm-offset-3 col-sm-8">
                            @Html.ActionLink(Html.Resource("EditProfileLink"), "EditProfile");
                        </div>
                    </div>
                }
            </div>
     
    </form>
    </div>

     

    Global.asax

    protected void Application_Start(object sender, EventArgs e)
    {
        Bootstrapper.Initialized += this.Bootstrapper_Initialized;
    }
     
    private void Bootstrapper_Initialized(object sender, Telerik.Sitefinity.Data.ExecutedEventArgs e)
    {
        if (e.CommandName == "Bootstrapped")
        {
            FrontendModule.Current.DependencyResolver.Rebind<IProfileModel>().To<PortalProfileModel>();
        }
    }

     

    I get exceptions because my GetProfilePreviewViewModel() never gets called (with or without new keyword. 

     

     

     

  2. Peter
    Peter avatar
    0 posts
    Registered:
    29 Oct 2012
    22 Jun in reply to Kevin
    Link to this post

    Thanks to Branslav Stanic, here is a possible solution:

    In class definition implement the following interface:

    PortalProfileModel : ProfileModel, IProfileModel

     

     

2 posts, 0 answered