2009-07-03 35 views
2

我已創建自定義字段類型,因爲它在共享點OOTB中存在,區別僅在於最終用戶不需要檢查名稱,即我已將其替換爲DropDownList。下拉列表顯示沒有。可用於網站的用戶,因爲我創建了一個繼承自SPFieldUser的FieldClass和一個從UserField繼承的FieldControlClass。它在所有條件下工作正常,即當我創建一個列表或文檔Libarary時,它會向我顯示與各個用戶的DropDownList ,然後說OK,它會爲我創建一個項目。我已經重寫在FieldControlClass一個Value屬性如下,人與組自定義字段類型共享點

public override object Value 

{ 

    get 
    { 
     SPUserCollection userscollection = rootWeb.SiteUsers; 
     //ddlInfoBox is a DropDownList to which I have Binded the collection of users in the form of string 
     SPUser user = userscollection.Web.EnsureUser(this.ddlInfoBox.SelectedValue); 
     SPFieldUserValue userval = new SPFieldUserValue(user.ParentWeb, user.ID, user.LoginName); 

     return userval; 
    } 

    set 
    { 
     SPFieldUserValue userval = (SPFieldUserValue) this.ItemFieldValue;   
     this.ddlInfoBox.SelectedValue = userval.Lookupvalue; //Here look up value is nothing but a Login name e.g In-Wai-Svr2\tjagtap 
    } 
} 

由於上述房產的自定義字段對這個當前列表項值將被存儲爲SPFieldUserValue e.g 27#;在圍-SVR2 \ tjagtap。

這裏的主要問題是,當這個特定的ListItem顯示在列表頁面視圖中,例如在AllItems.aspx或與其關聯的自定義視圖頁面上時,它顯示 數字爲27,作爲帶有文本的HyperLink的FieldValue作爲「In-Wai-Svr2 \ tjagtap」和PostBackURL作爲「/_layouts/userdisp.aspx?ID=27」。

當我編輯此項目時,它會在下拉列表中選擇相應的值,同時查看此項目(即DispForm.aspx)時也會顯示超鏈接。我有 通過在createchildcontrol()方法中寫入自定義邏輯來實現它,例如,如果它是New或Edit,則使用ControlMode,然後填充下拉列表(如果是Display),然後獲取ItemFieldValue類型將其轉換爲SPFieldUserValue並獲取相應的lookupid和value用於製作URL並顯示HyperLink的文本。

我花了很多時間搜索並將HyperLink作爲用戶名帶有導航insted UserID(27)作爲列表視圖頁上的字符串,例如AllItem.aspx但無濟於事,然後很多的研究中,我發現可能有一種方法可以通過使用字段類型定義xml文件實現此類功能,其中有一項規定可通過指定html代碼來定義DisplayPatteren。但這裏有一個問題我如何獲得UserID(27)與各自的用戶名,例如In-Wai-Svr2 \ tjagtap,以便製作像In-Wai-Svr2 \ tjagtap這樣的錨標籤,這將解決我的問題。我在DisplayPatteren下的開關的Default case語句中硬編碼了此錨標記,但它顯示AllItems.aspx上的字段值爲 In-Wai-Svr2 \ tjagtap27即xml文件中定義的值與字符串值(27)。

請幫我解決上面提到的2個問題。我真的需要儘快解決這個問題。

感謝&問候, Tejas的Jagtap

回答

0

具有u試圖重寫GetFieldValueAsHtml()的自定義字段類方法或也許RenderFieldForDisplay()在自定義字段控件類的方法。

0

您可以使用用戶字段類型的DisplayPattern CAML嗎?

相關問題