2013-12-21 58 views
0

我已經爲上下文菜單創建了以下代碼。有一個模板,我創建了一個上下文菜單。當我單擊上下文菜單時,它將獲得字段值並將其顯示在我已包含在ASPX文件中此代碼。我能夠遍歷項目中的字段,但無法傳遞給aspx文件。如何將值從類文件傳遞給siteMore中的showModalDialogue?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

using Sitecore.Shell.Framework.Commands; using Sitecore.Web.UI.Sheer; 
using Sitecore.Data.Items; 

namespace ContextMenus 
{ 
    public class CustomMenuType : Command 
    { 
     string ItemName; 

     public override void Execute(CommandContext context) 
     { 
      if (context.Items.Length == 1) 
      { 
       Item _item = context.Items[0]; 
       System.Collections.Specialized.NameValueCollection _parameters = new System.Collections.Specialized.NameValueCollection(); 
       _parameters["id"] = _item.ID.ToString(); 

       Sitecore.Context.ClientPage.Start(this, "Run", _parameters); 

       string ItemDatabase = _item.Database.Name; 
       string ItemParent1 = _item.ID.ToString(); 

       Sitecore.Data.Database master1 = Sitecore.Configuration.Factory.GetDatabase(ItemDatabase); 

       string ItemPath = _item.Parent.Paths.FullPath; 

       Sitecore.Data.Items.Item home1 = master1.GetItem(ItemPath); 
       ContextMenus.Entities.TemplateEntity objEntity = new ContextMenus.Entities.TemplateEntity(); 
       foreach (Sitecore.Data.Items.Item child in home1.Children) 
       { 
        objEntity.Fname = child["First Name"]; 
        objEntity.Lname = child["Last Name"]; 
        objEntity.Dept = child["Department"]; 
        objEntity.Age = child["Age"]; 
       } 
      } 
     } 

     protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args) 
     { 
      Sitecore.Text.UrlString _url = new Sitecore.Text.UrlString("/ContextMenus/CustomContextMenu.aspx"); 
      _url.Append("id", args.Parameters["id"]); 
      Sitecore.Context.ClientPage.ClientResponse.ShowModalDialog(_url.ToString()); 
     } 

     public override CommandState QueryState(CommandContext context) 
     { 
      foreach (Item _item in context.Items) 
      { 
       if (_item.TemplateID.ToString() != "{9F8334D3-01F3-4159-AA4A-BF513AC3E9FB}") 
       { 
        return CommandState.Hidden; 
       } 
      } 

      return base.QueryState(context); 
     } 
    } 
} 

我已經寫了下面的代碼的代碼隱藏文件[CustomContextMenu.aspx.cs]。它只會從我的實體[TemplateEntity]的數據,我想在aspx文件來顯示這一點。

ContextMenus.Entities.TemplateEntity ObjTempEntity = new 
ContextMenus.Entities.TemplateEntity(); 

StringBuilder sb = new StringBuilder(); 
sb.Append("First Name").Append("=").Append(ObjTempEntity.Fname); 
Response.Write(sb.ToString()); 

StringBuilder sb1 = new StringBuilder(); 
sb1.Append("Last Name").Append("=").Append(ObjTempEntity.Lname); 
Response.Write(sb1.ToString()); 

StringBuilder sb2 = new StringBuilder(); 
sb2.Append("Department Name").Append("=").Append(ObjTempEntity.Dept); 
Response.Write(sb2.ToString()); 

StringBuilder sb3 = new StringBuilder(); 
sb3.Append("Age").Append("=").Append(ObjTempEntity.Age); 
Response.Write(sb3.ToString()); 

我能夠遍歷項目現場values.I要dispaly在ASPX file.How這些值傳遞字段名稱與showModalDialogue值。

1.我在queryState方法中對模板ID進行了硬編碼。我在execute方法中獲取了該項的字段值。

2.我已經創建了CustomContextMenu aspx文件,我想要顯示字段值。如何將值從實體類[TemplateEntity]傳遞到CustomMenuType.aspx.cs文件。

+1

爲什麼不只是將該項目的GUID傳遞給ASPX模式,然後從代碼後面的Sitecore中獲取該項目?然後您可以訪問所有字段而不是傳遞單個字段 – jammykam

回答

0

呼叫Sitecore.Context.ClientPage.Start後,您的Execute方法中的一切似乎都是白費力氣。據我所知,它對任何事物都沒有任何影響。

您已經將項目的ID傳遞給模態對話框。您應該可以使用Request.QueryString["id"]在對話框的代碼隱藏中獲取該ID。然後您可以檢索該項目並獲取其字段的值。