Recently a requirement came across to open items in a list view directly into an edit form. Out of the box, if a user clicks on a list item they are presented with the default display form. From there they need to click edit to get into the edit form. While this is not an unreasonable request, sometimes you want users to just go straight to an edit form.
As you can see above, I have a custom list named Custom List with a few columns. Clicking the item in the list opens the display form. Just what you'd expect. Now let's look at why that happens. Hovering over the link, we'll see that the URL is http://servername/_layouts/listform.aspx?PageType=4&ListId={E4........". The key piece here is the "listform.aspx" page and the "PageType" querystring parameter. If you've worked with these forms in the past, you know they are not called listform.aspx, but rather NewForm.aspx, DispForm.aspx, and EditForm.aspx. So what is happening is the listform.aspx page is checking these querystring parameters and routing to the appropriate form for your needs at that time.
The PageType enumeration parameter determines what kind of form you get. In this case type 4, which equals a display form. We want type 6, which equals an edit form. You can get all the enumeration values over here at MSDN.
Now let's look at two ways to accomplish this, the brute force way and the elegant way.
Option #1 - Brute Force (jQuery)
Here we will use the tried and true Content Editor Webpart and jQuery. Sometimes you just don't have access to Designer or Visual Studio for a more robust solution and a little jQuery never hurt anyone!
Simply place a CEWP on your list view page and edit its HTML placing the following inside:
<script type="text/javascript">
$(function() {
// Change all display form links to edit form links
$('.ms-vb a[href*="listform.aspx"]').each(function(){
var link = $(this).attr('href');
link = link.replace("PageType=4","PageType=6");
$(this).attr('href', link);
});
});
</script>
This script is pretty straight forward, it looks for all links within a class of .ms-vb that have listform.aspx in their value. If you inspect the links on your form you'll see they are wrapped in a DIV with this class applied. After it finds all of the links it pulls the href value out and performs a replace changing the PageType to 6. It then sets the link back to this new updated value.
This method works great, although you may have to put this script into an external file and reference it in the CEWP, as they do not like inline scripts sometimes!
Option #2 - Elegant (Custom List View)
Now I love jQuery, and the method above works just fine but I don't really like placing CEWPs on pages to inject scripts like that. For a more elegant soltuion enter a custom list view and SharePoint Designer. The nice thing about this solution is its simple and easy, and we can create a new view which will can apply to the list. This gives a great way to back this change out as well, which is always nice to have as an option.
Before we start, you have to make sure there is at least 1 item in your list! We'll need this item in Designer to change the link value.
Open Designer and navigate to our Custom List.
In the Views section, click the "New" button.
We'll name this view "All Items With Edit Links" and mark it as the default view.
Now that we have the new view in our Views, click the view to open it in Designer. Then switch it over to Design view.
Double click the item in the list so that you highlight the actual link that opens the form. Simply clicking it will activate the TD around it, you need to double click it to activate the link. You'll know you have when you can see its Tag Properties in the left hand pane, and the first attribute is "href" with a value like "{$FORM_DISPLAY}&ID=....."
In the left hand Tag Properties pane click the value for the "href" attribute, this will activate the link for the XPath Experssion Builder. Click the "fx" link to launch it.
In the XPath Expression Builder you have a lot of options. Fortunately for us, we only need to change the value in the "Edit the XPath expression" textbox. Its current value should be "$FORM_DISPLAY". We'll change it to "$FORM_EDIT". This must be in all caps!
Click OK and then click Save in Designer to push the changes to your list.
Now, go back to your SharePoint site and visit the home page. In my environment I have the Custom List in my Quick Panel. Refreshing the home page will update that link with the new list view. Clicking the updated link will take you to your new list view with updated links!
Hovering over the link, it should now look like this: http://servername/_layouts/listform.aspx?PageType=6&ListId={E4........". Clicking the link will present us with the edit form.
And that's it! If you need to revert back to the original view, just change it in the List Settings!
As you can see, you have a couple of options to acheive opening edit forms by default. If you have access to Designer I would definitely go that route. It provides a cleaner option for making this change and you can avoid some of the headaches that CEWPs and Javascript can present.
Enjoy!
As you can see above, I have a custom list named Custom List with a few columns. Clicking the item in the list opens the display form. Just what you'd expect. Now let's look at why that happens. Hovering over the link, we'll see that the URL is http://servername/_layouts/listform.aspx?PageType=4&ListId={E4........". The key piece here is the "listform.aspx" page and the "PageType" querystring parameter. If you've worked with these forms in the past, you know they are not called listform.aspx, but rather NewForm.aspx, DispForm.aspx, and EditForm.aspx. So what is happening is the listform.aspx page is checking these querystring parameters and routing to the appropriate form for your needs at that time.
The PageType enumeration parameter determines what kind of form you get. In this case type 4, which equals a display form. We want type 6, which equals an edit form. You can get all the enumeration values over here at MSDN.
Now let's look at two ways to accomplish this, the brute force way and the elegant way.
Option #1 - Brute Force (jQuery)
Here we will use the tried and true Content Editor Webpart and jQuery. Sometimes you just don't have access to Designer or Visual Studio for a more robust solution and a little jQuery never hurt anyone!
Simply place a CEWP on your list view page and edit its HTML placing the following inside:
<script type="text/javascript">
$(function() {
// Change all display form links to edit form links
$('.ms-vb a[href*="listform.aspx"]').each(function(){
var link = $(this).attr('href');
link = link.replace("PageType=4","PageType=6");
$(this).attr('href', link);
});
});
</script>
This script is pretty straight forward, it looks for all links within a class of .ms-vb that have listform.aspx in their value. If you inspect the links on your form you'll see they are wrapped in a DIV with this class applied. After it finds all of the links it pulls the href value out and performs a replace changing the PageType to 6. It then sets the link back to this new updated value.
This method works great, although you may have to put this script into an external file and reference it in the CEWP, as they do not like inline scripts sometimes!
Option #2 - Elegant (Custom List View)
Now I love jQuery, and the method above works just fine but I don't really like placing CEWPs on pages to inject scripts like that. For a more elegant soltuion enter a custom list view and SharePoint Designer. The nice thing about this solution is its simple and easy, and we can create a new view which will can apply to the list. This gives a great way to back this change out as well, which is always nice to have as an option.
Before we start, you have to make sure there is at least 1 item in your list! We'll need this item in Designer to change the link value.
Open Designer and navigate to our Custom List.
In the Views section, click the "New" button.
We'll name this view "All Items With Edit Links" and mark it as the default view.
Now that we have the new view in our Views, click the view to open it in Designer. Then switch it over to Design view.
Double click the item in the list so that you highlight the actual link that opens the form. Simply clicking it will activate the TD around it, you need to double click it to activate the link. You'll know you have when you can see its Tag Properties in the left hand pane, and the first attribute is "href" with a value like "{$FORM_DISPLAY}&ID=....."
In the left hand Tag Properties pane click the value for the "href" attribute, this will activate the link for the XPath Experssion Builder. Click the "fx" link to launch it.
In the XPath Expression Builder you have a lot of options. Fortunately for us, we only need to change the value in the "Edit the XPath expression" textbox. Its current value should be "$FORM_DISPLAY". We'll change it to "$FORM_EDIT". This must be in all caps!
Click OK and then click Save in Designer to push the changes to your list.
Now, go back to your SharePoint site and visit the home page. In my environment I have the Custom List in my Quick Panel. Refreshing the home page will update that link with the new list view. Clicking the updated link will take you to your new list view with updated links!
Hovering over the link, it should now look like this: http://servername/_layouts/listform.aspx?PageType=6&ListId={E4........". Clicking the link will present us with the edit form.
And that's it! If you need to revert back to the original view, just change it in the List Settings!
As you can see, you have a couple of options to acheive opening edit forms by default. If you have access to Designer I would definitely go that route. It provides a cleaner option for making this change and you can avoid some of the headaches that CEWPs and Javascript can present.
Enjoy!