2015-02-02 17 views
5

Tôi đang cố gắng để có được tên hiển thị của một mục trong một droplink trong mã C# back-end. Tôi đang sử dụng Sitecore 6.6, không sử dụng MVC, và đang thiết lập một điều khiển droplink trong CMS cho các khách hàng được gọi là Address. Nguồn droplink chuyển đến /sitecore/Templates/User Defined/WAC/Address và các mục riêng lẻ có tên tuân thủ SEO và tên hiển thị có thể đọc được.Nhận giá trị của droplink trong Code-Behind

Ví dụ:

  • Item ID: {9E60F5F8-FBF2-4CBD-BB13-6A93397AAC87}
  • Name: 100-chính-street Tên
  • Màn hình: 100 Main Street, mẫu Town, 10011

mã của tôi:

protected void Page_Load(object sender, EventArgs e) 
{ 
    String sl = ""; 
    Sitecore.Data.Items.Item currentItem = Sitecore.Context.Item; 
    // BEGIN main class list 
    Sitecore.Collections.ChildList classList = currentItem.Children; 
    foreach (Sitecore.Data.Items.Item mainPage in classList) 
    { 
     if (mainPage.TemplateID.ToString() == "{27A9692F-AE94-4507-8714-5BBBE1DB88FC}") 
     { 
      sl += "<span class=\"address\">" + mainPage.Fields["Address"] +"</span>"; 
     }        
     else 
     { 
     } 
    } 
    // END main class list 
    classSessionList.Text = sl; 
} 

Mã này sẽ cho tôi ID của Item. Nếu tôi sử dụng mainPage.Fields["Address"].DisplayName, tôi nhận được "Địa chỉ".

Tôi làm cách nào để hiển thị Tên hiển thị của mục từ droplink?

Trả lời

2

Gõ trường vào trường tham chiếu. Sau đó truy cập vào thuộc tính TargetItem:

sl += "<span class=\"address\">" + ((ReferenceField)mainPage.Fields["Address"]).TargetItem.DisplayName +"</span>"; 
+0

Cảm ơn mọi người vì những mẹo tuyệt vời! Tôi sẽ thử những thứ này. :) – BaronForo

1

Câu trả lời thomas sẽ hoạt động dựa trên mã của bạn. Nhưng tôi sẽ đề nghị bạn cũng cố gắng gắn bó với các thành phần máy chủ ASP.Net và Sitecore.

Điều đó sẽ tránh lỗi tham chiếu Null, sẽ hỗ trợ Trình chỉnh sửa trang tốt hơn và cũng làm cho mã của bạn dễ bảo trì hơn.

Bạn có thể có một repeater trong đánh dấu của bạn như thế này:

<asp:Repeater ID="rptAdresses" runat="server"> 
    <ItemTemplate> 
     <span class="address"> 
      <sc:Text id="scAddress" runat="server" Field="__Display Name" Item="<%#(Sitecore.Data.Items.Item)Container.DataItem%>"></sc:Text> 
     </span> 
    </ItemTemplate> 
</asp:Repeater> 

Và sau đó ràng buộc địa chỉ trên mã của bạn đằng sau:

private void BindRepeater() 
{ 
    if (mainPage.TemplateID.ToString() != "{27A9692F-AE94-4507-8714-5BBBE1DB88FC}") 
    { 
     rptAdresses.Visible = false; 
    } 
    else 
    { 
     rptAdresses.DataSource = Sitecore.Context.Item.GetChildren(); 
     rptAdresses.DataBind(); 
    } 
} 

Một điểm mà tôi nhận thấy là dòng mainPage.TemplateID.ToString() != "{27A9692F-AE94-4507-8714-5BBBE1DB88FC}". Đó là một điểm mà bạn cũng có thể cải thiện. ID được mã hóa cứng không phải là một tính năng tốt. Bạn có thể tạo một lớp học để giữ những thứ đó hoặc thậm chí tốt hơn, bạn có thể nghĩ nhiều hơn về thiết kế của bạn để tránh nó.

cổ vũ

6

Sử dụng LookupField để nhận mục refrence dưới đây là những mẫu mã:

LookupField address= (LookupField)mainPage.Fields["Address"]; 
Item addressItem = address.TargetItem; 
string displayName = addressItem.Fields["DisplayName"].Value; 

Nếu bạn muốn sử dụng một dòng vì sử dụng mã dưới đây:

((LookupField)mainPage.Fields["Address"]).TargetItem.DisplayName 
0

Tất cả các giải pháp khác là hoàn hảo, nhưng bạn cũng có thể sử dụng mã bên dưới:

var itemID=mainPage.Fields["Address"].value; 
Item targetItem=Sitecore.Context.Database.GetItem(itemID); 

if (mainPage.TemplateID.ToString() == "{27A9692F-AE94-4507-8714-5BBBE1DB88FC}") 
{ 
    sl += "<span class=\"address\">" + targetItem.DisplayName +"</span>"; 
}        
else 
{ 
} 

Với cách tiếp cận này, bạn có thể sử dụng mọi trường mục mục tiêu.

Các vấn đề liên quan