Все построители выражений должны наследоваться от базового класса ExpressionBuilder (который находится в пространстве имен System.Web.Compilation). Вот как вы можете объявить построитель выражений для генерации случайного числа:
public class RandomNumberExpressionBuilder : ExpressionBuilder
{ ... }
Чтобы облегчить жизнь, создим статический метод, который выполняет необходимую нам задачу (в данном случае — генерацию случайного числа):
public static string GetRandomNumber (int lowerLimit, int upperLimit)
{
Random rand = new Random();
int randValue = rand.Next(lowerLimit, upperLimit + 1);
return randValue.ToString();
)
Преимущество такого подхода в том, что когда вы используете CodeDOM, то просто генерируете единственную строку кода, необходимую для вызова метода GetRandomNumber() (вместо кода, необходимого собственно для генерации случайного числа).
Теперь вам нужно переопределить метод GetCodeExpression(). Это метод, который ASP.NET вызывает, когда находит выражение, которое отображается на ваш построитель выражений (во время компиляции страницы). В этой точке вам нужно проверить выражение на предмет отсутствия ошибок, и затем генерировать код для вычисления результата выражения (используя объект CodeExpression из пространства имен System.CodeDom). Этот динамически генерированный кусок кода будет исполнен каждый раз, когда запрашивается страница.
Вот первая часть метода GetCodeExpression():
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,
object parsedData, ExpressionBuilderContext context)
{
// entry.Expression — строка с числом
// без префикса (например: "1,6").
if (!entry.Expression.Contains(", "))
{
throw new ArgumentException(
"Должно быть указано два числа, разделенных запятой."};
}
else
{
// Получить два числа.
string[] numbers = entry.Expression.Split(',');
предыдущая следующая страница оглавление
377