Crea la richiesta di ribellizione
-
10-12-2019 - |
Domanda
Voglio fare quanto segue.Se un utente arriva a una raccolta di siti speciale, verrà reindirizzato a un ribelli.Se il sottostviamento non esiste, verrà creato.
So che è una creazione in un arrampicata e ho già testato tutto da AllowunSafeupdates di convalidareformDigest ma nulla creerà il sito per me.Dovrei essere qualcosa come il mysitehost.
Hai un'idea come farlo?
Soluzione
Create a custom 404 page for your site collection, then either add code behind to it with your own logic as when you want to create a subsite and when not..
OR in SharePoint 2013 create a custom error page, add a content editor webpart to it, and some javscript code which will create a subsite for you, but there is a lot of things that you will require to set e.g. subsite name, url etc...
Altri suggerimenti
I've stolen from the mysitehost. There the mysite is create with this mechanic:
if (Page.IsPostBack)
{
SPLongOperation operation = new SPLongOperation(this.Page);
operation.LeadingHTML = "Meeting wird erstellt";
operation.Begin();
SPUtility.ValidateFormDigest();
Do site creation ...
operation.End(currentMeeting.Url);
}
// This code sets an reloadAsPostBack on the site to begin site creation
SPPageContentManager.RegisterClientScriptBlock(this.Page, base.GetType(),
"CreateMySiteRepost", "document.forms[0].submit();");
When the page is loaded with GET Request then it will be posted by client code. Then you have a POST Request.
You can try setting the current HTTPContext
as null, this way sharepoint does not recognise that it is a GET Request. Please see the below code, which worked for me:
using (SPSite site = new SPSite(SPContext.Current.Site.Url))
{
using (SPWeb web = site.OpenWeb())
{
HttpContext tempContext = HttpContext.Current;//create back up of context.
HttpContext.Current = null;//Set current context as null
try
{
web.AllowUnsafeUpdates = true;
SPWeb newWeb = web.Webs.Add("sitename", "sitename", "description", (uint)1033, "STS#0", false, false);
web.Update();
}
catch (Exception Ex)
{
lblMessge.Text = Ex.Message;
}
finally
{
web.AllowUnsafeUpdates = false;
HttpContext.Current = tempContext;//Restore the context
}
}
}