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();
}
}
此代码甚至可以验证您的新项目名称是否存在错误的字符和长度。
我已将菜单上下文项添加到 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();
}
}
此代码甚至可以验证您的新项目名称是否存在错误的字符和长度。