Я успешно реализовал сценарий, подобный этому, используя jQuery. в основном я использую функцию beforeSend
: для отображения страницы типа «пожалуйста, подождите». Вот основной код в игре (также я не могу, вы также можете использовать базовый класс AsyncController
для выполнения асинхронного действия):
<script type="text/javascript">
$(document).ready(function() {
$('#create').bind('click', function() {
saveFundProperty();
});
});
// main functions
function saveFundProperty() {
var url = '<%= Url.Action("Create", "FundProperty") %>';
var params = { fundId: $("#FundID").val(), propertyId: $("#PropertyID").val() };
SendAjax(url, params, beforeQuery, saveFundPropertyResponse);
}
function beforeQuery() {
var url = '<%= Url.Action("Wait", "FundProperty") %>';
$("#statusMsg").load(url);
}
function saveFundPropertyResponse(data) {
if (data.length != 0) {
if (data.indexOf("ERROR:") >= 0) {
$("#statusMsg").html(data).css('backgroundColor','#eeaa00');
}
else {
$("#statusMsg").html(data);
}
}
}
</script>
надеюсь, это поможет.
метод SendAjax
- это просто функция-обертка, которая делает вещи немного более непротиворечивыми. здесь это в полном объеме:
<script type="text/javascript">
function SendAjax(urlMethod, jsonData, beforeSendFunction, returnFunction, dataType, contentType) {
$.ajaxSetup({ cache: false });
dataType = dataType || "text"; // default return type
contentType = contentType || "application/x-www-form-urlencoded"; // default input type
$.ajax({
type: "POST",
url: urlMethod,
data: jsonData,
dataType: dataType,
contentType: contentType,
beforeSend: function() {
if(beforeSendFunction!==null)
beforeSendFunction();
},
success: function(data) {
// Do something interesting here.
if (data != null && returnFunction!==null) {
returnFunction(data);
}
},
error: function(xhr, status, error) {
// Boil the ASP.NET AJAX error down to JSON.
var err = eval("(" + xhr.responseText + ")");
// Display the specific error raised by the server
alert(err.Message);
}
});
}
</script>
[править] - не уверен, что происходит с форматированием SendAjax. надеюсь, что это легко скопировать / вставить ...