【问题标题】:How do I use the Sitecore ShowControlPopup for dialog interactions with a user?如何使用 Sitecore ShowControlPopup 与用户进行对话交互?
【发布时间】:2011-08-08 10:55:26
【问题描述】:

我根据数据定义手册中的内容创建了一些简单的命令,其中用户交互是右键单击一个项目 -> 插入 -> MyCommand,然后是一个简单的对话框,说“你真的想这样做吗? ”。那太棒了。

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

第一个参数称为“Id” - 我在这里输入什么 ID?使用popup控件的item的id?

第二个参数叫做“where”——我猜这是弹出窗口的 URL。内容项是否需要存在于此处,还是只是一个虚拟 URL?

第三个参数叫做“controlId”——我在这里放什么id?我已经尝试了定义弹出窗口的控件的 ID,但我收到一条错误消息,提示找不到控件。

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

到目前为止,这是我的代码。如果在尝试创建控件时失败,并出现关于无法找到具有提供的 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(仅限本地开发)

【问题讨论】:

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

标签: sitecore sitecore6


【解决方案1】:

为了记录,Sitecore 支持人员返回了一些答案

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

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

3) “controlId”是弹出项的 ID

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

此外,SheerUI 仍然没有文档记录,我被告知只需在 Sitecore 代码库中查找示例。很高兴我们可以查看 Sitecore 代码,但有一点方向会很棒。即使 doco 只是简单地说“对于 ShowPopupControl 的使用,UI 示例 x 可以在 dll z 的类 y 中找到”。

命令和弹出窗口的生命周期可以通过弹出窗口中的代码隐藏或命令本身来结束。这取决于最终的args.WaitForPostBack(),也可以是 'args.WaitForPostBack(true)or '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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2012-12-06
    • 1970-01-01
    • 2011-07-06
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多