16

SharePoint 2010に取り組んでいます。そのライブラリにドキュメントライブラリIDとドキュメントIDがあります。ドキュメントライブラリが存在するWebサイトもありません。したがって、ドキュメントの完全なURLを取得する必要があります。実行時。どうすれば入手できますか。私は以下を試しました。

string filepath = currentList.DefaultViewUrl + "/" + sListItem.Url;

これに答えてください。

4

8 に答える 8

49

でフィールド「EncodedAbsUrl」を使用しますSPListItem。同様にSPFile機能します:

SPListItem item = ...;
string absUrl = (string) item[SPBuiltInFieldId.EncodedAbsUrl];

またはSPFile

 SPFile file = ...;
 string absUrl = (string) file.Item[SPBuiltInFieldId.EncodedAbsUrl];
于 2011-03-07T08:22:36.977 に答える
3

組み込みのフィールド ID は確かに最善の方法ですが、エンコードされた URL を返しますが、これは必要な場合とそうでない場合があります。

最善の方法は、どこかのユーティリティ クラスに小さな拡張メソッドを追加することだと思います。

public static string AbsoluteUrl(this SPFile File, bool Decode = true)
{
    string EncodedUrl = File.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString();
    if (Decode)
        return SPEncode.UrlDecodeAsUrl(EncodedUrl);
    else
        return EncodedUrl;
}

そして、次のように呼び出します

Item.File.AbsoluteUrl();

デコードされた URL が必要な場合、または

Item.File.AbsoluteUrl(false);

URL をエンコードしたままにしたい場合。

Decode のデフォルト パラメータ値は .Net4+ でのみ使用できるため、SP2013 でのみ使用できますが、SP2010 のオーバーロード メソッドは簡単に作成できます。SPEncode クラスにアクセスするには、Microsoft.SharePoint.Utilities 名前空間への参照も必要です。

于 2013-08-13T01:30:37.047 に答える
2
public string GetItemURL(SPListItem item)
    {
        string web = item.Web.Url;
        string listID = item.ParentList.ID.ToString();
        string contentType = item.ContentTypeId.ToString();
        string itemID = item.ID.ToString();
        string url = web+"/_layouts/listform.aspx?PageType=4&ListID={"+listID+"}&ID="+itemID+"&ContentTypeID="+contentType;
        return url;
    }

それは私のために働いています。お役に立てば幸いです (リスト アイテムの URL)

于 2012-01-03T14:45:34.290 に答える
2

これを試して 、

          using (SPSite ospSite = new SPSite("http://abcd:24931"))
           {
              using (SPWeb web = ospSite.OpenWeb("/subsite")
               {
               // Get document library collection here and fetch all the document urls
                   SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["docu"]; 

                //where docu is my  document library
                SPListItemCollection items = docLib.Items;

                   foreach (SPListItem item in items)
                    {
                       string url = item.Url;
                    }
               }
          }

これでうまくいくことを願っています。

于 2011-03-07T07:51:32.967 に答える
1

これがドキュメント ライブラリ用である場合は、これを試してください。

item.Web.Url+"/"+item.File.Url
于 2011-08-23T07:32:22.867 に答える
1

以下のコードを使用して、ファイルの絶対 URL を取得します。

SPFile file;    
string url = file.Item[SPBuiltInFieldId.EncodedAbsUrl] as string;
于 2013-10-01T10:34:04.207 に答える
0

価値があるのは、プロパティにアクセスitem.Webすることは、実際にSPWebオブジェクトをインスタンス化していることを意味します。これは、これを破棄する必要があることを意味します。そうしないと、メモリリークが発生します。
すでに言及されているより良い方法とより速い方法がある場合、それは多くのオーバーヘッドです。

BuiltInFieldId.EncodedAbsUrlこれにより、必要なものに最も簡単にアクセスできるため、前述のアプローチを使用します。

于 2012-01-06T12:11:36.700 に答える
-4

答えは文字列url=currentweb.url + "/" + Listitem.url;

于 2011-03-10T13:59:00.107 に答える