我目前正在开发一个EpiServer项目,我们使用ContentType属性来设置块的DisplayName和Order。订单基于块的名称。这是一个例子:
[ContentType(
DisplayName = "My First Block",
Order = 133536,
GUID = "0f02e38a-a6e2-4333-9bd1-c61cf573d8d3",
Description = "Just an example block.",
GroupName = "Blocks.Content"
)]
public class MyFirstBlock : BaseBlock
{
}
显然,EpiServer不能按字母顺序对块进行排序,因此我们根据DisplayName生成订单作为解决方法。发明了一个公式来确定顺序。一位同事编写了一个JavaScript函数,可用于生成订单号:
function getEPiOrderNumber(value) {
var alphabeticalIndex = function (character) {
return character.toLowerCase().charCodeAt() - 96;
};
var firstSection = alphabeticalIndex(value[0]);
var secondSection = alphabeticalIndex(value[1]) + 10;
var thirdSection = alphabeticalIndex(value[2]) + 100;
return `${firstSection}${secondSection}${thirdSection}`;
}
此功能可以在浏览器的控制台中执行。比手动计算订单更好,但这要求我切换到浏览器,打开控制台,粘贴此代码并执行它,最后复制结果并将其粘贴到我正在处理的模型中。 / p>
我认为能够从VS中生成订单号会更方便。我一直在研究使用Visual Studio Extensions但是找不到任何我喜欢的东西。
最佳解决方案是能够选择(部分)DisplayName,右键单击并从上下文菜单中选择一个新命令,该命令将生成订单并将其粘贴到正确的位置。或者将它放在夹板上,这样我就可以轻松地将它粘贴在正确的位置。显示订单的弹出窗口也可以。
这甚至可能吗?
另一个选项可能是其中一个工具栏菜单中的新命令,比如工具,它会显示一个小窗口,我可以在其中输入/粘贴文本并让它生成我可以粘贴的顺序在代码中。
我已经想出如何将自定义命令添加到“工具”菜单以及如何生成代码并显示它,但是如何输入文本?或者是否可以从编辑器窗口中检索所选文本?这也可以解决我的问题。
如果有人能指出我正确的方向,那就太棒了!
PS。我对这个问题的标题不太满意,所以如果有人能想到一个能更好地描述我问题的标题,我愿意接受建议。
答案 0 :(得分:1)
您可以使用以下代码从Visual Studio编辑器窗口中检索所选文本。
DTE dte = (DTE)this.ServiceProvider.GetService(typeof(DTE));
string text = "";
if (dte.ActiveDocument != null)
{
var selection = (TextSelection)dte.ActiveDocument.Selection;
text = selection.Text;
}