Question

I was reading this link which provide a solution to a redirect problem inside my SharePoint enterprise wiki site collection:-

http://www.itidea.nl/index.php/what-about-you-must-fill-out-all-required-properties-before-completing-this-action-when-publishing-a-page/

and to add the user control inside my page layout i did the following steps:-

1.i open the visual studio 2012, create a new SharePoint Farm Solution.

2.then i add a new User Control (Farm solution only) inside the Vs prodect.

3.under the user control i added the following code:-

using Microsoft.SharePoint;
using Microsoft.SharePoint.Taxonomy;
using Microsoft.SharePoint.WebControls;
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace WikiPopUp.ControlTemplates.WikiPopUp
{
    [ToolboxData("<{0}:CustomValidationRequiredFieldsOnPage runat=server></{0}:CustomValidationRequiredFieldsOnPage>")]
    public class CustomValidationRequiredFieldsOnPage : WebControl
    {
        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            if (SPContext.Current.FormContext.FormMode == SPControlMode.Edit)
            {
                bool arethere = AreThereAnyMissingRequiredFieldsOnPage();

                if (arethere)
                {
                    //SPPageStateControl:
                    //Provides an ASP.NET control that handles the Ribbon buttons controlling the state of a Microsoft SharePoint Server wiki or publishing page,
                    //such as the CheckInCheckOutButton or the PublishingButton.
                    SPPageStateControl baseParentStateControl = Page.Items[typeof(SPPageStateControl)] as SPPageStateControl;

                    //Publish button: SPListItem MissingRequiredFields checks this.FieldHasValue(link.Name, field);
                    //the field is empty (which is right) when the page is first created (MMD field is never filled in)
                    //when the field was once filled, saved and emptied the field in sp code still has the previous value and the check MissingRequiredFields succeeds
                    //after succeeding this check the page is validated (this.Page.Validate()) and this one fails which results SP validating the page as the Save button does

                    if (baseParentStateControl.HasError)
                    {
                        //this overwrites the previous PageErrorState
                        //and validates the page
                        //no popup anymore and status updates in yellow area
                        baseParentStateControl.EnsureItemSavedIfEditMode(false);
                    }
                }
                else
                {
                    //there are missing fields at this listitem, but they're not on the page
                    //do nothing here, because the SerializedErrorState contains the navigate url to the Edit Properties page
                    //and a message pops up
                }
            }
        }

        /// <summary>
        /// Check if required fields are missing which are present at the page
        /// </summary>
        /// <returns></returns>
        private static bool AreThereAnyMissingRequiredFieldsOnPage()
        {
            foreach (Control control in SPContext.Current.FormContext.FieldControlCollection)
            {
                //get the control type
                string type = control.GetType().Name;

                FieldTypes controlType = (FieldTypes)Enum.Parse(typeof(FieldTypes), type);

                switch (controlType)
                {
                    case FieldTypes.TaxonomyFieldControl:
                        TaxonomyFieldControl tfc = control as TaxonomyFieldControl;
                        if (!tfc.IsValid)
                        {
                           return true;
                        }
                        break;
                    default:
                        break;
                }
            }

            return false;
        }

        enum FieldTypes
        {
            DateTimeField, FieldValue, TextField, RichImageField, NoteField, RichHtmlField, PublishingScheduleFieldControl, TaxonomyFieldControl, BooleanField, ComputedField
        }
    }
}

4.then i deploy the farm solution.

5.i went to the central administration, and under the farm solutions i found the solution deployed globally.

so my question is how i can register the user control which i already deployed under the farm solution inside my page layout ? not sure what i should write exacly. i tried adding the following code inside my page layout:-

<%@ Register Tagprefix="MyControls" 
    Namespace="WikiPopUp.ControlTemplates.WikiPopUp" 
    Assembly="WikiPopUp.ControlTemplates, Version=15.0.0.0, Culture=neutral, PublicKeyToken=******" %>

but i got the following error when i try opening the page:-

Sorry, something went wrong 
Could not load file or assembly 'WikiPopUp.ControlTemplates, Version=15.0.0.0, Culture=neutral, PublicKeyToken=*****' or one of its dependencies. The system cannot find the file specified. 

can anyone advice please?

Thanks

Was it helpful?

Solution 2

i have applied the SP CU for september 2014, and my redirect problem has been solved . so now i do not need the workaround...

OTHER TIPS

I think you just need to add your control to the safe controls section in your web.config. You can configure your VS project to do this for you. You should have a Module in your VS project, highlight this item and look at the properties window. You should see a Safe Control Entries property. Click the ellipsis in the box next to this property and it will bring up a popup window where you can add an entry for your control. You'll need to provide it with the Name, Assembly and Namespace of your control and set Safe to true. Save and redeploy your webpart and see if that does the trick. If not take a look at your web.config and make sure there was an entry added for your control.

Licensed under: CC-BY-SA with attribution
Not affiliated with sharepoint.stackexchange
scroll top