如何使用Sitecore ShowControlPopup与用户进行对话交互?

如何使用Sitecore ShowControlPopup与用户进行对话交互?,sitecore,sitecore6,Sitecore,Sitecore6,我根据数据定义烹饪书中的内容创建了一些简单的命令,其中用户交互是右键单击一个项->插入->我的命令,然后是一个简单的对话框,上面写着“您真的想这样做吗?”。太好了 现在我需要一个命令,它允许我在对话框中与用户进行更多的交互。我需要添加几个单选按钮列表,以便用户可以选择选项,然后选择一个按钮来运行命令。我想我需要使用ShowControlPopup来实现这一点。我创建了一个控件(ascx)来定义弹出窗口的外观(并发布了一个测试版本,以查看它在Sitecore中作为基本控件工作)。但是,我不确定显示

我根据数据定义烹饪书中的内容创建了一些简单的命令,其中用户交互是右键单击一个项->插入->我的命令,然后是一个简单的对话框,上面写着“您真的想这样做吗?”。太好了

现在我需要一个命令,它允许我在对话框中与用户进行更多的交互。我需要添加几个单选按钮列表,以便用户可以选择选项,然后选择一个按钮来运行命令。我想我需要使用ShowControlPopup来实现这一点。我创建了一个控件(ascx)来定义弹出窗口的外观(并发布了一个测试版本,以查看它在Sitecore中作为基本控件工作)。但是,我不确定显示ControlPopup的参数是什么

第一个参数被称为“
Id
”——我应该在这里输入什么Id?使用弹出控件的项目的id

第二个参数称为“
where
”——我猜这是弹出窗口将具有的URL。内容项是否需要存在于此处,或者它只是一个虚拟URL

第三个参数称为“
controlId
”——我在这里放什么id?我已经尝试了定义弹出窗口的控件id,但是我得到一个错误,说找不到该控件

当用户在对话框中选择其选项并单击“确定”时,什么会处理该事件?弹出控件的codebehind中的命令类或事件处理程序的Run方法

这是到目前为止我的代码。If在尝试创建控件时失败,错误是无法找到提供了id的项。我只是猜测了一下弹出控件想知道哪些项目

protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args)
{
 if (args.IsPostBack)
 {
  if (args.HasResult)
  { // normally code here would run when the dialog box is completed by the user.  Is that so in this case?

  }
 }
 else
 {
  Sitecore.Context.ClientPage.ClientResponse.ShowControlPopup("F3684C4C-D9EF-4796-A471-5B05553119B6",
                 "http://mysite/dummy.aspx",
                 "B8D503D0-AEBE-43AE-B924-C3849F03E90D");

  args.WaitForPostBack();
 }
}
干杯

詹姆斯


Sitecore 6.2 rev 091012/Win7 32bit/IIS7/SQLExpress 2008(仅限本地开发人员)

为了记录在案,Sitecore支持人员提供了一些答案

1) “Id”是触发弹出窗口的项目的Id

2) “Where”是相对于“Id”的位置。例如上面、下面、正下面

3) “controlId”是弹出窗口项的ID

Sitecore中使用ShowPopupControl的示例有主菜单和上下文菜单

此外,SheerUI仍然没有文档记录,我被告知只需在Sitecore代码库中查找示例。我们可以查看Sitecore代码,这很好,但是有一点指导就好了。即使doco只是简单地说“为了使用ShowPopupControl,可以在dll z的类y中找到UI示例x”

命令和弹出窗口的生命周期可以通过弹出窗口中的代码隐藏或命令本身来结束。这取决于最后的
args.WaitForPostBack()
,它也可以是'args.WaitForPostBack(true)
或'args.WaitForPostBack(false)

最后我使用了ShowModalDialog(),因为这实际上是我想要的,而不是一个用户可以点击的弹出窗口

所以我的代码最后看起来像这样

protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args)
{
    if (args.IsPostBack)
    {
        ;// we never come here becuase we have set waitforpostback to false.  all processing is handled by the popup control
    }
    else
    {
        Sitecore.Text.UrlString popUpUrl = new Sitecore.Text.UrlString("/sitecore/content/MYSITE/MyControlPageItem.aspx");
        popUpUrl.Append("id", args.Parameters["id"]);
        popUpUrl.Append("database", args.Parameters["database"]);
        popUpUrl.Append("language", args.Parameters["language"]);
        Sitecore.Context.ClientPage.ClientResponse.ShowModalDialog(popUpUrl.ToString(),"400", "600", "", true);

        args.WaitForPostBack(false);    // if this is true this command will wait for the modal dialog created above to close
                                        // at which time the Run method will check for postback & args
    }
}

纯粹的用户界面完全没有文档记录。。。我已经向Sitecore抱怨了好几次,但我还没有看到任何更新。如果您还没有这样做,我建议为此打开一个支持请求。我发现实现透明组件最简单的方法是找到一个接近您所需的现有对话框,然后使用reflector复制和修改您所需的内容。例如,在物理文件中搜索“设置发布”以查找“发布限制”对话框。打开XML文件并查找“CodeNext”类。然后就是从功能区中挖掘命令并复制调用方式的问题。谢谢Bryan&dmgdotnet。我已经用Sitecore打开了一个支持案例。我会发布他们提供的任何有用的答案。我会看一看Sitecore代码,但我不确定现在是否有时间。我可能只是创建一些不同的命令来处理可能出现的不同场景。