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

时间:2015-03-31 09:37:12

标签: asp.net input sitecore user-input sitecore8

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

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

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

enter image description here

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 Update 1

1 个答案:

答案 0 :(得分:3)

我不知道您使用的是哪个版本的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();
    }
}

此代码甚至会验证您的新项目名称是否包含不正确的字符和长度。