2010-06-25 8 views
8

Я реализую элемент управления recaptcha из Google.Как установить настройки ключа recaptcha во время выполнения

Я построил простой тестовый проект C# из своего примера и все работает. Теперь вместо того, чтобы иметь PublicKey и PrivateKey на странице aspx, я бы предпочел присвоить эти значения во время выполнения, поскольку их, скорее всего, вытащили из таблицы web.config или таблицы базы данных.

Я попытался следующие в Page_Load

protected void Page_Load(object sender, EventArgs e) { 
     recaptcha.PublicKey = "<deleted for obvious reasons>"; 
     recaptcha.PrivateKey = "<ditto>"; 
    } 

, но я получаю ошибку о том, «рекапчи должен быть настроен с помощью открытого & закрытого ключа.»

Я также попытался переопределить метод oninit страницы и присвоить значения там, но не радость.

Любые идеи о том, куда это нужно идти?

ответ

16

Попробуйте использовать значение setincodebehind в теге, например:

<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server" 
    PublicKey="setincodebehind" PrivateKey="setincodebehind" ... /> 

Это должно позволить вам установить ключи в коде правильно. Есть еще несколько способов сделать это. Например, вы можете получить значения из статического класса, как это:

<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server" 
    PublicKey="<%= RecaptchaSettings.PublicKey %>" 
    PrivateKey="<%= RecaptchaSettings.PrivateKey %>" ... /> 

Где RecaptchaSettings класс вы предоставляете. Или, вы можете положить ключи в appSettings разделе вашего web.config, и доступ к ним, как это:

<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server" 
    PublicKey="<%$appSettings:RecaptchaPublicKey %>" 
    PrivateKey="<%$appSettings:RecaptchaPrivateKey %>" ... /> 

Надежда, что помогает.

+0

Perfect. Спасибо – NotMe

+0

Прошу прощения, кажется, что 'setincodebehind' может быть любой строкой. Спасибо, это сработало хорошо. – goodeye

+1

Я немного испортил это - да - у вас должны быть атрибуты PublicKey и PrivateKey внутри элемента управления на вашем представлении, но им не нужны правильные значения. Если их нет - при доступе через codebehind вы получаете объект, не установленный на ошибку экземпляра. – ajwaka

2

Другой способ установить значения ключей, используйте <appSettings> ключи RecaptchaPublicKey и RecaptchaPrivateKey. Эти значения будут использоваться автоматически, если они не будут отменены во время декларации управления (mjd79's answer, первый способ).

Pro: Если у вас есть несколько деклараций, вам нужно хранить ключи только в одном месте, сухом принципе.

Такое поведение можно увидеть через исходный код, RecaptchaControl.cs, line 135-...:

public RecaptchaControl() 
{ 
    this.publicKey = ConfigurationManager.AppSettings["RecaptchaPublicKey"]; 
    this.privateKey = ConfigurationManager.AppSettings["RecaptchaPrivateKey"]; 
    ... 
+0

Интересная находка. Благодаря! – NotMe

Смежные вопросы