【问题标题】:How to display a popup when saving a Sitecore item?保存 Sitecore 项目时如何显示弹出窗口?
【发布时间】:2013-05-01 16:39:55
【问题描述】:

保存 Sitecore 项目时,我试图显示一个弹出窗口以与用户交互。根据他们更改的数据,我可能会显示一系列 1 或 2 个弹出窗口,询问他们是否要继续。我已经想出了如何利用 OnItemSaving 管道。这很简单。我想不通的是如何显示一个弹出窗口并对用户的输入做出反应。现在我在想我应该以某种方式使用 Sitecore.Context.ClientPage.ClientResponse 对象。这是一些显示我正在尝试做的代码:

public class MyCustomEventProcessor
{
    public void OnItemSaving(object sender, EventArgs args)
    {
      if([field criteria goes here])
      {
        Sitecore.Context.ClientPage.ClientResponse.YesNoCancel("Are you sure you want to continue?", "500", "200");
        [Based on results from the YesNoCancel then potentially cancel the Item Save or show them another dialog]
      }
    }
}

我应该使用不同的方法吗?我看到还有 ShowModalDialog 和 ShowPopUp 和 ShowQuestion 等。我似乎找不到关于这些的任何文档。此外,我什至不确定这是否是执行此类操作的正确方法。

【问题讨论】:

    标签: sitecore sitecore6


    【解决方案1】:

    这个过程是这样的(我应该注意我从来没有从 item:saving 事件中尝试过这个,但是,我相信它应该可以工作):

    1. item:saving 事件中,调用客户端管道中的对话处理器,并向其传递一组参数。
    2. 处理器执行以下两项操作之一;显示对话框,或使用响应。
    3. 收到响应后,处理器会使用它,您可以在那里执行您的操作。

    这是一个演示上述步骤的示例:

    private void StartDialog()
    {
        // Start the dialog and pass in an item ID as an argument
        ClientPipelineArgs cpa = new ClientPipelineArgs();
        cpa.Parameters.Add("id", Item.ID.ToString());
    
        // Kick off the processor in the client pipeline
        Context.ClientPage.Start(this, "DialogProcessor", cpa);
    }
    
    protected void DialogProcessor(ClientPipelineArgs args)
    {
        var id = args.Parameters["id"];
    
        if (!args.IsPostBack)
        {
            // Show the modal dialog if it is not a post back
            SheerResponse.YesNoCancel("Are you sure you want to do this?", "300px", "100px");
    
            // Suspend the pipeline to wait for a postback and resume from another processor
            args.WaitForPostBack(true);
        }
        else
        {
            // The result of a dialog is handled because a post back has occurred
            switch (args.Result)
            {
                case "yes":
    
                    var item = Context.ContentDatabase.GetItem(new ID(id));
                    if (item != null)
                    {
                        // TODO: act on the item
    
                        // Reload content editor with this item selected...
                        var load = String.Format("item:load(id={0})", item.ID);
                        Context.ClientPage.SendMessage(this, load);
                    }
    
                    break;
    
                case "no":
    
                    // TODO: cancel ItemSavingEventArgs
    
                    break;
    
                case "cancel":
                    break;
            }
        }
    }
    

    【讨论】:

    • 非常感谢您的工作!现在还有一个问题。如果不是简单的 Yes,No,Cancel 我想显示一个更复杂的弹出窗口来询问用户一系列问题怎么办。根据第一个问题的答案,我可以完全取消保存,或者我可以继续保存,然后运行一些自定义代码,然后问他们第二个问题。根据第二个问题的答案,我将运行更多自定义代码,然后完全关闭弹出窗口。我会使用 SheerResponse.ShowPopup 方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    相关资源
    最近更新 更多