Если я правильно понимаю ваш вопрос, вы хотите, чтобы позиции в CKEditor 5 представляли собой одно целочисленное смещение от начала документа. Так же, как изначально в текстовой текстовой области.
Хотя было бы возможно рассчитать такое смещение в CKEditor 5 (суммируя длины всех элементов, предшествующих выделению), это не имеет особого смысла. В CKEditor 5 позиций представлены массивами смещений. Это представление позволяет легко и быстро найти местоположение в дереве. С единственным смещением, которое было бы сложным и медленным.
Концепция положений и смещений объясняется в документации , и я бы рекомендовал изменить образ мышления при работе с моделью CKEditor 5. Это больше не простой текст, и думать о нем, как о содержании textarea, у вас не получится.
Я обнаружил, что использование ActionParameters
делает ваш код очень легко тестируемым. Вы можете сделать это так:
// inside your actionfilter
public override void OnActionExecuting(ActionExecutinContext context)
{
var someData = // ... load some data
context.ActionParameters["someData"] = someData;
}
// and then in your action method
[ProvideSomeData]
public ViewResult Index(SomeData someData)
{
// someData will be populated in here
}
re: # 2
Просто хочу отметить, что проблема со статическим полем состоит в том, что все запросы будут использовать одно и то же статическое поле. Если у вас есть два запроса, выполняющихся одновременно, всегда есть вероятность, что запрос B перезапишет значение запроса A, и вы будете использовать неправильное значение при выполнении действия для запроса A.
Я бы не использовал статические члены для хранения информации, специфичной для запроса.