Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

I want to do the following. If a user comes to a special site collection he will be redirected to a subsite. If the subsite doesn't exist it will be created.

I know that's a creation in a GETRequest and I already tested everything from AllowUnsafeUpdates to ValidateFormDigest but nothing will create the site for me. I should be something like the MySiteHost.

Do you have an idea how doing this?

share|improve this question
    
Is it like if the site does not exists, create and redirect? –  Unnie Apr 9 at 13:37
    
Can you please elaborate more what have you tried? Maybe adding some code that you have tried will help.. –  Arsalan Adam Khatri Apr 9 at 13:37

3 Answers 3

up vote 2 down vote accepted

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...

share|improve this answer

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.

share|improve this answer

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

                        }
                    }
                }
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.