Custom redirect after creating a new Sharepoint Item

When creating a new Item in a Sharepoint list, the redirection works according to these rules:

  • If the URL contains a valid “Source” parameter, the user user will be redirected to this URL
  • Otherwise the user will be redirected to the default view of the list, such as AllItems.aspx

There are different approaches to change this behavior:

Via URL Parameter

One appraoch is to override the redirection by changing the Source parameter of the URL. This means the incoming link to the NewForm.aspx contains the redirection URL already. This is pretty static, sometimes you want to set the redirection on the fly. Also the appraoch enforces the same redirection for both Safe and Close buttons on the form.

Via Event Receiver

It is possible to redirect within an event receiver. This means placing a redirect command within a synchrounous event which aborts the normal event flow in a way, that asynchrounous events and other attached event receivers won’t work anymore.

Via Custom Safe Buttons

It is possible to replace the default buttons on the NewForm.aspx page by custom controls. So basically you develop a custom button that inherits from the Sharepoint “SaveButton” class. In there you can apply custom logic for redirection.

Via JavaScript

This is a novel approach I developed to get more flexibility and stability for the redirection behavior. It allows to set the redirection on the clientside.

$(document).ready(function() {

    var button = $("input[id$=SaveItem]");
    // change redirection behavior
        button.removeAttr("onclick");
        button.click(function() {
            var elementName = $(this).attr("name");
            var aspForm = $("form[name=aspnetForm]");
            var oldPostbackUrl = aspForm.get(0).action;
            var currentSourceValue = GetUrlKeyValue("Source", true, oldPostbackUrl);
            var newPostbackUrl = oldPostbackUrl.replace(currentSourceValue, "MyRedirectionDestination.aspx");

            if (!PreSaveItem()) return false;
            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(elementName, "", true, "", newPostbackUrl, false, true));
        });
    
});

So basically we modify the click behavior of the create button on the NewForm.aspx to pass in a new “Source” parameter value just before the form is submitted.

19 Responses to “Custom redirect after creating a new Sharepoint Item”


  1. 1 bhildo February 4, 2011 at 8:45 pm

    Need help with above java script solution. Can you explain above solution line by line. Also where do i change your code to make it work. Also what is “SaveItem, name, aspnetform, source”? I have pasted your code below.

    Thanks in advance

    $(document).ready(function() {

    02

    03 var button = $(“input[id$=SaveItem]”);

    04 // change redirection behavior

    05 button.removeAttr(“onclick”);

    06 button.click(function() {

    07 var elementName = $(this).attr(“name”);

    08 var aspForm = $(“form[name=aspnetForm]”);

    09 var oldPostbackUrl = aspForm.get(0).action;

    10 var currentSourceValue = GetUrlKeyValue(“Source”, true, oldPostbackUrl);

    11 var newPostbackUrl = oldPostbackUrl.replace(currentSourceValue, “MyRedirectionDestination.aspx”);

    12

    13 if (!PreSaveItem()) return false;

    14 WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(elementName, “”, true, “”, newPostbackUrl, false, true));

    15 });

    16

    17 });

  2. 2 UbuntuMan April 3, 2012 at 9:53 pm

    Kudos to you, Adrian!! Nice post. I’ve been looking for a long time for something like this. Thank you very much for posting.

  3. 3 Pedro January 11, 2013 at 12:00 pm

    This is working great but it’s not working properly in Firefox and Chrome. In Firefox, when inserting an valid or invalid date, I get an unxpected error or this page has been modified error. In Chrome if I insert a valid data I can add the item, but if I insert an invalid date I get the same error that in Firefox. In IE we have no problems, do you an idea of what it could be? Thank you.

  4. 4 tabletr June 6, 2013 at 2:47 pm

    Please help!

    when i click button submits succesfull but not redirected.
    Problem with modal dialog Windows. it says ‘window.frameElement’ is null or not an object
    i cannot resolve

    Thanks

    sorry for my english

  5. 5 IPat June 6, 2013 at 9:49 pm

    I would like to use this technique on an Edit form Save button. Is this possible? Also, in the return URL I wanted to add a filter based on a field I have just edited. Is this possible also?

    Great post anyway many thanks.

  6. 6 Fred July 21, 2014 at 5:16 pm

    Nope…doesn’t work….

  7. 7 Clem July 23, 2014 at 10:46 am

    throws web page cannot be found error in SP 2010.

  8. 8 Kelly August 11, 2014 at 4:54 pm

    Using the JavaScript example, it doesn’t save the item. Any clues why?

  9. 9 craftsman chainsaw parts primer bulb September 21, 2014 at 9:15 am

    My intent with this chain saw was for clearing the bottom” of vines, weeds, small timber at ground stage;..

    too big for gas trimmer brush blades and too little to reveal the gas chain saw blades to dust,
    and so on. Whereas on telephone with Craftsman Club, perceive a
    number of more have been ordered.

  10. 10 Timothy Dilbert February 16, 2015 at 6:28 am

    Unfortunately this does not work when the form is loaded in a Dialog box. Still searching for an answer on this..

  11. 11 Sush February 17, 2015 at 1:35 pm

    On the JQuery solution, please tell me where should I put the code. I’m a power user and uses SharePoint Designer 2013 for my SP 2013 sub site.

  12. 12 Francis Trujillo March 17, 2015 at 1:24 am

    Wow! The Source parameter. I was down a rabbit hole on PostBack heck.
    Thank you!! Works great!

  13. 13 karthikeyan baskaran July 8, 2015 at 2:49 pm

    Not working
    $(“form[name=aspnetForm]”).get(0).action;
    returns undefined

  14. 14 Mike W July 17, 2015 at 3:23 am

    Post is a little confusing. Please document what your code is doing.

  15. 15 Srini October 23, 2015 at 9:08 am

    $(document).ready(function() {

    var button = $(“input[id$=SaveItem]”);
    // change redirection behavior
    button.removeAttr(“onclick”);
    button.click(function() {
    var elementName = $(this).attr(“name”);
    var aspForm = document.forms[‘aspnetForm’];
    var oldPostbackUrl = aspForm.action;
    var currentSourceValue = GetUrlKeyValue(“Source”, true, oldPostbackUrl);
    var newPostbackUrl = oldPostbackUrl.replace(currentSourceValue, “MyRedirectionDestination.aspx”);

    if (!PreSaveItem()) return false;
    WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(elementName, “”, true, “”, newPostbackUrl, false, true));
    });

    });

    Above code worked for SP2013.

  16. 18 sharop December 24, 2015 at 2:38 am

    Hi, there is some variable where the new item id, is keeping? after postback. i need send to other form.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s





Follow

Get every new post delivered to your Inbox.

%d bloggers like this: