kentico 无法 trim 一个字符串,错误 outOfBoundException

kentico is not able to trim a string, error outOfBoundException

我正在尝试从 iframe 标签切换到 标签,方法是获取 youtube iframe 的 src 并将其用作 标签的 src,我已经将视频源作为一个大字符串放在页面形式并通过此字符“|”将其拆分为更小的部分所以每个 标签都知道他必须引用哪个 src 索引。我的问题是我想使用这种格式拍摄 YouTube 视频的图像:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

从拆分字符串中获取此图像,我尝试重新拆分源字符串,获取视频 ID(并因此获取视频图像),下面是我的代码:

 protected void Page_Load(object sender, EventArgs e)
{


    string [] values = ImageFieldValues.Split('|');
    if (values.Length != 0) { 
    foreach (string source in values)
    {

        litCon.Text = "<a name='testiFrame' data-fancybox-type='iframe' id='runtimeIFrame' class='col-xs-3 various fancybox.iframe' style='margin-bottom: 10px;float: right;'  href='" + source+ "'><img id='iframeImage' src='http://img.youtube.com/vi/"+ source.Substring(26) + "/hqdefault.jpg'/></a>";
        AddToDivImages.Controls.Add(litCon);


    }
    }
}

这是在 kentico 项目的转换中使用的自定义控件,视频源加载正常,唯一的问题是 source.substring(26),它是 returning 错误提示索引越界,它只对索引(0)有效,任何大于零的数字都会return同样的错误,我也试过trim,拆分,删除......就像这样将整个字符串作为一个块,这是 kentico 中事件日志的屏幕截图 Event Logs

没有看到 ImageFieldValues 的初始值,很难说它为什么不起作用。可能是您有一个空字符串(由字符串末尾的附加管道创建)?尝试使用删除空条目的 Split 的重载:

ImageFieldValues.Split(new[] { "|"}, StringSplitOptions.RemoveEmptyEntries);

根据以上内容,我假设 ImageFieldValues 看起来像这样:

https://www.youtube.com/watch?v=dQw4w9WgXcQ|https://www.youtube.com/watch?v=wZZ7oFKsKzY

您可能想尝试使用正则表达式,而不是使用子字符串。我看了一下,您应该能够通过以下方式实现您的目标:

protected void Page_Load(object sender, EventArgs e)
{
    string pattern = "watch\?v=(?<code>[A-Za-z0-9_]*)";

    string [] values = ImageFieldValues.Split('|');
    if (values.Length != 0) { 
    foreach (var source in values)
    {
        Match match = Regex.Match(source, pattern);

        litCon.Text = "<a name='testiFrame' data-fancybox-type='iframe' id='runtimeIFrame' class='col-xs-3 various fancybox.iframe' style='margin-bottom: 10px;float: right;'  href='" + source + "'><img id='iframeImage' src='http://img.youtube.com/vi/"+ match.Groups["code"].Value + "/hqdefault.jpg'/></a>";
        AddToDivImages.Controls.Add(litCon);
    }
}

这消除了对您用于 source.Substring 的索引的依赖,如果 URL 结构发生变化,它将保护您。如果您不熟悉正则表达式,可以在此处找到模式的细分:https://regex101.com/r/3Y0ZNY/1