我已将一个菜单上下文项添加到TreelistEx中。此菜单项发送消息,我稍后在HandleMessage方法中捕获。
在这个方法中,我创建了一个新项目(模板类型和父项目在treelist字段的源中给出)。
我现在需要的是一种向用户询问姓名的方法。但我还没有找到一种简单的方法来做到这一点。
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
答案 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();
}
}
此代码甚至会验证您的新项目名称是否包含不正确的字符和长度。