I was reading this link which provide a solution to a redirect problem inside my SharePoint enterprise wiki site collection:-
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