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 содержимым ответа.