Obter URL absoluta para listitem do formulário de exibição padrão
-
10-12-2019 - |
Pergunta
Eu preciso ter uma URL absoluta de um listitem de exibição de formulário, atualmente eu faço da seguinte forma:
item.ParentList.ParentWeb.Url.TrimEnd('/') //"http://example.com"
+ "/"
+ item.ParentList.DefaultDisplayFormUrl.Trim('/')//"Lists/WorkflowTasks/DispForm.aspx"
+ "?ID=" + item.ID //"?ID=1"
Isso me leva a URL correta, o que significa http://example.com/Lists/WorkflowTasks/DispForm.aspx?ID=1.
No entanto, esta falha quando a minha colecção de sites é um pouco mais sofisticada url de host, por exemplo http://example.com/sites/secondsite/ - ambos os métodos do meu código de retornar a url que contém o "/sites/secondsite/ parte assim que eu acabar com http://example.com/sites/secondsite/sites/secondsite/Lists/etc...
Como faço para código-lo em uma maneira mais confiável?
Solução
Existem alguns métodos para esta disponível no modelo de objeto sem a necessidade de manipular as barras etc si mesmo, um método usando MakeFullUrl:
var fullUrl = item.ParentList.ParentWeb.Site.MakeFullUrl(item.ParentList.DefaultDisplayFormUrl);
Parâmetros
strUrl
Tipo:Do sistema.Cadeia
Uma cadeia de caracteres que especifica o servidor-URL relativo.
Valor de retorno Tipo:Do sistema.Cadeia
Uma seqüência de caracteres que contém o URL completo.
Outras dicas
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
Apenas desligar minha máquina virtual e, portanto, não pode testar, mas como sobre o uso de algo como SPContext.Current.Web.Url
em combinação com SPList.DefaultDisplayFormUrl
.Note que SPWeb.Url
fica a URL absoluta para o site.