Sitecore:使用菜单上下文项后显示输入选项

Sitecore: Show input option after using menu context item

我已将菜单上下文项添加到 TreelistEx。此菜单项发送一条消息,我稍后会在 HandleMessage 方法中捕获该消息。

在这种方法中,我创建了一个新项目(模板类型和父项目在树列表字段的源中给出)。

我现在需要的是一种向用户询问名称的方法。但是我一直没能找到一个简单的方法来做到这一点。

class MyTreeListEx : TreelistEx, IMessageHandler
{
    void IMessageHandler.HandleMessage(Message message)
    {
        if (message == null)
        { return; }

        if (message["id"] == null)
        { return; }

        if (!message["id"].Equals(ID))
        { return; }

        switch (message.Name)
        {
            case "treelist:edit":
                // call default treelist code

            case "mytreelistex:add":
                // my own code to create a new item
        }
    }
}

有人对如何实现这一目标有任何建议吗?

编辑:添加图像和代码 + 我正在使用 Sitecore 8 更新 1

我不知道您使用的是哪个版本的 Sitecore,但您可以尝试 SheerResponse.Input 方法。

你可以这样使用它:

using Sitecore.Configuration;
using Sitecore.Globalization;
using Sitecore.Shell.Applications.ContentEditor.FieldTypes;
using Sitecore.Web.UI.Sheer;

void IMessageHandler.HandleMessage(Message message)
{
    ...
    case "mytreelistex:add":
        Sitecore.Context.ClientPage.Start(this, "AddItem");
        break;
}

protected static void AddItem(ClientPipelineArgs args)
{
    if (args.IsPostBack)
    {
        if (!args.HasResult)
            return;
        string newItemName = args.Result;
        // create new item here

        // if you need refresh the page:
        //SheerResponse.Eval("scForm.browser.getParentWindow(scForm.browser.getFrameElement(window).ownerDocument).location.reload(true)");
    }
    else
    {
        SheerResponse.Input("Enter the name of the new item:", "New Item Default Name", Settings.ItemNameValidation, 
            Translate.Text("'$Input' is not a valid name."), Settings.MaxItemNameLength);
        args.WaitForPostBack();
    }
}

此代码甚至可以验证您的新项目名称是否存在错误的字符和长度。