Pergunta

Eu preciso ter uma URL absoluta de um listitem de exibição de formulário, atualmente eu faço da seguinte forma:

No http://example.com/:

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top