MVC Async Postback & RenderPartial

Извиняюсь, если Название немного вводит в заблуждение, я просто не знаю, как это сделать.

Хорошо, вот сценарий. Я разрабатываю виджет обратной связи mvc, который размещен на сайте Sitefinity 5.1. Этот виджет фактически является просто div, который отображается, когда пользователь наводит курсор на метку feedbackLaunch, используя jquery.

ВИД / ВИДЖЕТ

@using (Html.BeginFormSitefinity())
{  
    <label for="feedbackLaunch">
        <span class="FeedbackHighlight feedbackLaunch">Feedback</span>
    </label>

    <div class="feedback">
    </div>

    <div class="FeedbackContent" style="display: none">
        <h1>Feedback</h1>
        <h2>I thought this page was:
            <br />
            <br />
            @Html.DropDownListFor(x => x.PageRatingId, new SelectList(Model.Rating, "PageRatingId", "PageRatingName"))
            <br /><br />
            Please give further detail:
            <br /><br />
             @Html.TextAreaFor(model => model.PageDetails, new { @style = "height: 100px;" })
              <br /><br />
       <input type="submit" value="Submit" />

        </h2>
    </div>

}

Так что у меня есть страница в фоновом режиме с этим div теперь выскочил. Прекрасный.

Тем не менее, сейчас я хочу сделать щелчок для отправки, но без обратной передачи, так как div обратной связи исчезнет. После отправки я бы по сути отобразил новый div или просмотр, сообщив, что информация была опубликована (она будет отправлена ​​на веб-сервис).

Каков наилучший подход для этого?

Должны ли я иметь два частичных представления, одно для формы представления, а другое для раздела "Спасибо"?

Я упомянул Sitefinity на всякий случай, если есть какие-то ошибки, связанные с этим, учитывая, что это довольно новая функция CMS.

Любые указатели с благодарностью получили.

2 ответа

Решение

Вы можете использовать AJAX с jQuery. Например, дайте вашей форме идентификатор, а затем AJAXify его, как только вы увидите виджет в вашем представлении:

$('#feedbackForm').submit(function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function(result) {
            alert('thanks for submitting your feedback');
            // TODO: hide the div containing the feedback form
        }
    });
    return false;
});

Если ваше "Спасибо" не имеет динамически сгенерированного контента, просто вызовите AJAX-вызов для какого-либо действия контроллера, и когда вы получите ответ 200 назад, просто замените div на новый с благодарностью, все с использованием jQUery.

Если вам нужно динамически сгенерировать благодарность на сервере, то вызовите ajax-запрос к действию, которое возвращает частичное с сообщением благодарности, и снова используйте jquery, чтобы заменить исходный div содержимым ответа.

Другие вопросы по тегам