asp.net MVC 3 - JQuery ajax $ .get возвращает <nonscript>reCaptcha вместо фактического HTML в частичном представлении - PullRequest
1 голос
/ 31 августа 2011

Эту проблему сложно объяснить, но я сделаю все возможное.

Я просто пытаюсь отобразить ввод reCaptcha в форме, встроенной в частичное представление.

Вот как я получаю частичное представление с помощью JQuery $ .get:

GetAndRenderPartialContent: function (url, obj) {
        $.get(url, function (data) {
            obj.replaceWith(function () {
                var content = "<div id=\"" + obj.attr('id') + "\">" + data + "</div>";
                return content;
            });
        });
    }

Это прекрасно работает как метод расширения JQuery.

URL, который передается этому методу, является просто маршрутом контроллера, который возвращает частичное представление, подобное этому:

public ActionResult GetSomeContent()
{
    var model = new SomeModel();
    // set modal values

    // Finally return partial view
    return PartialView("_MyPartialView", model);
}

Это прекрасно работает. Он даже отображает значения формы, привязанные к модели.

Проблема только с reCaptcha. На мой взгляд, у меня есть эта строка для визуализации reCaptcha:

@Microsoft.Web.Helpers.ReCaptcha.GetHtml(theme: "clean", publicKey: ConfigurationManager.AppSettings["reCaptcha:publicKey"], language: "en")

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

<noscript>
    &lt;iframe frameborder="0" height="300px" src="http://www.google.com/recaptcha/api/noscript?k=[MY PUBLIC KEY REMOVED FOR DEMO]" width="500px"&gt;&lt;/iframe&gt;
    &lt;br /&gt;&lt;br /&gt;
    &lt;textarea cols="40" name="recaptcha_challenge_field" rows="3"&gt;&lt;/textarea&gt;
    &lt;input name="recaptcha_response_field" type="hidden" value="manual_challenge" /&gt;
</noscript>

Похоже, что метод PartialView использует HtmlEncoding для вывода из reCaptcha, но не для других элементов формы, встроенных в форму. Кто-нибудь сталкивался с этим или имел элегантное решение этой надоедливой проблемы, которая занимала пару часов моего времени?

Единственное решение, которое мне удалось достичь, - отобразить reCaptcha в родительском представлении, скрыть его до вызова страницы частичного представления, а затем переместить в соответствующую позицию в форме, что нежелательно и не требуется. элегантное решение.

Любая помощь приветствуется.

Спасибо.

* ОБНОВЛЕНИЕ ** Я попытался вставить код представления здесь, но редактор stackoverflow продолжал отклонять код. Достаточно сказать, что в представлении нет ничего необычного. Модель содержит свойства для привязки, такие как:

[Required]
[Display(Name = "Email Address")]
public string Email { get; set; }

[Required]
[Display(Name = "Confirm Email Address")]
[Compare("Email", ErrorMessage = "Your email and confirmation email do not match.")]
public string ConfirmEmail { get; set; }

Форма:

@using (Html.BeginForm("UpdateInfo", "MyAccount", FormMethod.Post, new { @id = "InfoForm" }))

Визуализация элементов модели:

<div class="editor-label">
     @Html.LabelFor(m => m.Email) 
</div>
<div class="editor-field">
    @Html.TextBoxFor(m => m.Email) @Html.ValidationMessageFor(m => m.Email)
</div>

В конце формы:

<fieldset id="reCaptchaFieldset">
<legend>Captcha Authorization</legend>
@ReCaptcha.GetHtml(theme: "clean", publicKey: System.Configuration.ConfigurationManager.AppSettings["reCaptcha:publicKey"])
 </fieldset>

Ответы [ 2 ]

0 голосов
/ 05 января 2012

Используйте часть API AJAX в этом документе: http://code.google.com/apis/recaptcha/docs/display.html

Используйте этот код вчастиView.

0 голосов
/ 31 августа 2011

Попробуйте следующее:

@Html.Raw(Microsoft.Web.Helpers.ReCaptcha.GetHtml(theme: "clean", publicKey: ConfigurationManager.AppSettings["reCaptcha:publicKey"], language: "en"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...