Get absolute URL to listitem's default display form
-
10-12-2019 - |
Question
I need to have an absolute URL of a listitem's display form - currently I do it the following way:
item.ParentList.ParentWeb.Url.TrimEnd('/') //"http://example.com"
+ "/"
+ item.ParentList.DefaultDisplayFormUrl.Trim('/')//"Lists/WorkflowTasks/DispForm.aspx"
+ "?ID=" + item.ID //"?ID=1"
This gets me the correct URL, meaning http://example.com/Lists/WorkflowTasks/DispForm.aspx?ID=1.
However this fails when my site collection is on a slightly more sophisticated host url, for example http://example.com/sites/secondsite/ - both methods from my code return the url containing the "/sites/secondsite/ part so I end up with http://example.com/sites/secondsite/sites/secondsite/Lists/etc...
How do I code it in a more reliable way?
Solution
There are a couple of methods for this available in the object model without the need to handle the slashes etc yourself, one method using MakeFullUrl:
var fullUrl = item.ParentList.ParentWeb.Site.MakeFullUrl(item.ParentList.DefaultDisplayFormUrl);
Parameters
strUrl
Type: System.String
A string that specifies the server-relative URL.
Return value Type: System.String
A string that contains the full URL.
OTHER TIPS
var parentWebUrl = item.ParentList.ParentWebUrl;
var displayFormUrl = item.ParentList.DefaultDisplayFormUrl;
var itemIdQuery = "?ID=" + item.ID;
var fullUrl = parentWeblUrl.EndWith('/') ? parentWebUrl + displayFormUrl + itemIdQuery :
parentWebUrl + "/" + displayFormUrl + itemIdQuery
Just shut down my VM and hence can't test but how about using something like SPContext.Current.Web.Url
in combination with SPList.DefaultDisplayFormUrl
. Note that SPWeb.Url
gets the absolute URL for the website.