TL;博士:
我需要将一个 TextBox 插入到 PlaceHolder 中,无论我在哪里看到类似 的标记@token@
,并且拆分@
不会削减它。我怎样才能做到这一点?
设置:
我有一个数据库驱动的 ASP.NET 页面,在几个地方有合并字段。在其中一个管理页面上,我想通过显示合并字段所在的文本框来使合并字段中的文本可编辑。文本的其余部分需要保持不可编辑。
输入如下所示:
“敏捷的棕色狐狸@foo@跳过@bar@懒惰的@baz@狗。”
此处的合并字段为foo
、bar
和baz
。我有一个Dictionary<string, string>
合并字段的值:
var Tokens = new Dictionary<string, string>
{
{ "foo", "john" },
{ "bar", "george" },
//...etc...
};
目标:
对于这些文本块中的每一个,我都有一个 PlaceHolder。我想做的是为每个不可编辑的文本块动态插入一个标签,并为每个可编辑的块动态插入一个 TextBox。所以上面的结果就像我硬编码了这样的东西:
<asp:Label Text="the quick brown fox" />
<asp:TextBox ID="foo" Text="john" />
<asp:Label Text="jumps over" />
<asp:TextBox ID="bar" Text="george" />
<asp:Label Text="the lazy" />
...etc...
问题:
匹配@token@
模式很容易。诀窍是在正确的位置添加标签和文本框。给定输入中可能有多个标记,因此我必须将其分成可编辑和不可编辑的文本,同时仍跟踪每个 TextBox 对应的合并变量。事实证明,这并不像听起来那么容易。我可以使用正则表达式将输入字符串转换为 HTML,用标签替换@token@
模式。<input>
但是,这有几个问题:
- 我已经有大量用于动态服务器控制方法的代码。
- 我只想匹配特定的令牌,所以
/@[a-zA-Z\d]+@/
不够严格。
以前的策略:
到目前为止,我只是将输入字符串拆分为@
,然后为每个奇数子字符串插入一个标签,为每个偶数子字符串插入一个文本框。效果很好,但是要求正在发生变化。@
现在将允许在变量名之外使用符号,因此输入字符串可能如下所示:
blah blah@blah.com @foo@ blah
...在这种情况下,只有foo
一个合并字段。
当前策略:
我觉得我需要遍历令牌并构建某种标签和文本框数组。问题是输入中可能包含任意数量的标记,因此一旦我将 TextBoxes 拆分为@foo@
,我需要再次遍历文本以获取@bar@
. 我想我需要为此进行某种递归,但我不能完全确定它。