2012-11-04 32 views
1

我有一個ASP.NET web應用程序託管在內置搜索的CMS(sharepoint 2013)上。有效地將擴展字符串映射到圖標URL

當運行與搜索文件查詢,文件類型的唯一標誌是一個擴展的字符串,而無需等待一段"PNG" or "JPG"

格式化我沒有得到文件回來,我剛剛得到的元數據描述文件。要清楚,我沒有得到任何MIME類型或文件對象,我只是得到一個擴展字符串。

我環顧站點尋找這樣的問題,而我沒有看到一個。

好像有可能是某種形式返回一個字符串的方法,並採用一個字符串輸入在其簽名,並搜索通過某種類型的對象集合,如下所示:

最終結果:

static class FileIcons 
{ 
    static public string PDF = string.Format("{0}", SPContext.Current.Site.ServerRelativeUrl + "_layouts/15/monkeysphere/images/icons/pdf.png"); 
    static public string Word = string.Format("{0}", SPContext.Current.Site.ServerRelativeUrl + "_layouts/15/monkeysphere/images/icons/word.png"); 
    static public string Generic = string.Format("{0}", SPContext.Current.Site.ServerRelativeUrl + "_layouts/15/monkeysphere/images/icons/file.png"); 

    static private Dictionary<String, String> IconUrls = new Dictionary<String,String>() 
         { 
          {"JPG", Picture},{"JPEG", Picture},{"GIF", Picture},{"PNG", Picture}, 
          {"PDF", PDF},{"DOC", Word},{"DOCX", Word},{"XLS", Excel},{"XLSX", Excel},{"PPT", PowerPoint},{"PPTX", PowerPoint} 
         }; 

    static public string GetIconUrlFromExtension(string extension) 
    { 
     var formattedExtension = extension.Trim().Replace(".","").ToUpper(); 
     if (string.IsNullOrEmpty(extension) || !IconUrls.ContainsKey(formattedExtension)) 
      return Generic; 
     return IconUrls[formattedExtension]; 
    } 
} 

回答

1

我認爲一個Dictionary將是一個更好的選擇。類似這樣的:

public static class IconUrls { 
    static Dictionary<string, string> _extensions; 
    static string DefaultUrl = "~/siteroot/images/icons/genericicon.png"; 

    static IconUrls { 
     extensions = new Dictionary<string, string>() { 
      { "JPG", "~/siteroot/images/icons/jpegicon.png" }, 
      { "JPEG", "~/siteroot/images/icons/jpegicon.png" } 
     } 
    } 

    public static Dictionary<string, string> Extensions { 
     get { 
      return _extensions; 
     } 
    } 

    public static string GetIconUrl(string extension) { 
    { 
     if(string.IsNullOrEmpty(extension) || !_dictionary.ContainsKey(extension.Trim().ToUpper())) 
      return DefaultUrl; 
     return _extensions[extension.Trim().ToUpper()]; 
    } 
} 

您也可以從配置文件加載映射,以免硬編碼它們。

+0

你將如何處理未知的分機或擴展拼寫錯誤?檢查null並插入默認值? – Wesley

+0

我會檢查'Dictionary'是否包含該值,如果沒有,則返回一個默認值。 編輯:看我更新的例子。 – Jeremy

+1

我想用.ContainsKey代替.Contains – Wesley