2017-08-30 39 views
0

我需要在一個特定的模式我的項目的排列順序。Sitecore的GlassMapper MVC添加標準字段建模

我已經嘗試過這樣的,但沒有運氣:

[SitecoreField("__Sortorder")] 
public string SortOrder { get; set; } 

任何想法,我怎麼能包括在我的模型標準字段?

如果這是不可能的,其實我有在這種情況下一個清單的工作,從GlassMapper的自動映射不按字母順序返回。

這裏是清單字段的定義:

IEnumerable<Guid> Filter_Tags_To_Shows {get; set;} 

而像前面提到的,按字母順序返回列表中,但我沒有改變排序之後,因爲缺少中將sortOrder領域。

在此先感謝。

+0

什麼問題你上面的代碼有?玻璃是否根本不映射該字段,還是映射該字段但具有不正確的值?你是否嘗試將字段類型更改爲int而不是字符串? – DougCouto

+0

是int返回0,字符串返回null。所以我認爲沒有完成映射。但是該項目有一個排序順序值。 – Bgl86

+0

您可以嘗試將您的字段移動到名爲Appearance的類,並使用SitecoreType裝飾器和外觀類的TemplateId裝飾該類,該字段實際來自哪裏?只是一個考驗。也許在你的Glass版本中,你需要在你的類所代表的模板上存在該字段(我不知道這是否是任何Glass版本的要求)。 – DougCouto

回答

1

Filter_Tags_To_Shows屬性返回的Guid S的,我相信一個列表,你那麼做的事情得到日e從Sitecore鏈接的項目。這不是最有效的方式和玻璃,可以指定它他們的將自動映射鏈接的項目類型。

IEnumerable<FilterTagClass> Filter_Tags_To_Shows {get; set;} 

假設FilterTagClass有一個像你的問題中指定的排序順序:

[SitecoreType(TemplateId={GUID})] 
public class FilterTagClass : GlassBase 
{ 
    [SitecoreField("__Sortorder")] 
    public virtual int SortOrder { get; set; } 
} 

您可以按使用LINQ:

@foreach (var tag in Filter_Tags_To_Shows.OrderBy(i => i.SortOrder)) 
{ 
    // do stuff 
} 

這是答案的重新散列從@DougCouto但要注意它是沒有必要轉換的ID,如果你設置的屬性和映射到正確的對象。

作爲使用Checklist字段的替代方法,您可以使用Multilist字段,該字段允許您選擇標籤並根據需要對其進行重新排序。玻璃應按照您設定的順序返回它們。

1

此屬性

IEnumerable<Guid> Filter_Tags_To_Shows {get; set;} 

會給你的ID的列表,你在清單字段中選擇的項目。爲了得到實際項目的排序順序,你需要這些ID轉換成對象:

var tagsToShow = Filter_Tags_To_Shows.Select(i => SitecoreContext.GetItem<SomeClassType>(i)); 

假設SomeClassTypeSortOrder的場,你應該然後能夠訪問該字段爲每個對象在tagsToShow,做這樣的事情:

var sortedTagsToShow = tagsToShow.OrderBy(i => i.Sortorder); 
+0

謝謝DoughCouto。就像前面提到的,我將SortOrder字段添加到SomeClassType,但值爲0,int爲null,字符串爲null。不知何故,GlassMapper不會自動映射這個。也許我會將它們轉換爲真正的Sitecore項目,然後我有sortorder字段。 – Bgl86

+0

不知何故,這現在工作,謝謝你DoughCoto! – Bgl86

0

清單和多重表存儲作爲Sitecore的數據庫原始文本和順序將根據數據源項序列進行更新,你可以試試下面的示例。

Sitecore.Data.Fields.MultilistField multilistField = item.Fields["FieldName"]; 

foreach (var child in multilistField.GetItems) 
{ 
    // It should provide in short order 
}