Ich habe eine funktionierende Suchfunktion, möchte aber die jquery Fortschrittsbalken beim Senden einbeziehen. Manchmal kann das Laden der Teilansicht bis zu 5 Sekunden dauern. Der Fortschrittsbalken wird benötigt, damit der Benutzer die Taste zum Senden/Bestätigen nicht drückt. Und ich möchte den Fortschrittsbalken ausblenden, bis submit gedrückt wird.JQuery Fortschrittsbalken und Teilansicht beim Senden
Gibt es eine Möglichkeit, dass der Prozentsatz die Ladezeit tatsächlich misst?
JQuery Fortschrittsbalken: https://jqueryui.com/progressbar/#label
Ausblick:
@model Application.Web.ViewModels.BillingViewModel
@{
ViewBag.Title = "BillingLetterSearch";
Layout = "~/Views/Shared/_LayoutFullWidth.cshtml";
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<style>
.ui-progressbar {
position: relative;
}
.progress-label {
position: absolute;
left: 50%;
top: 4px;
font-weight: bold;
text-shadow: 1px 1px 0 #fff;
}
</style>
<div class="row">
<panel>
<table class="table">
<thead>
<tr>
<th>Search By Employee Number:</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="3">
@Html.TextBoxFor(x => Model.EmployeeNumber, new { @class = "form-control", @id = "EmployeeNumber", @autofocus = "autofocus" })
</td>
<td>
</td>
</tr>
<tr>
<td colspan="4" style="text-align:center;">
<br>
<div class="submit-holder">
<button id="SubmitButton" class="btn-mvc btn-mvc-large btn-mvc-green" onclick="DisplayBuyinInfo();">
Search
</button>
</div>
</td>
</tr>
</tbody>
</table>
</panel>
<div class="row" id="Results">
@Html.Partial("_SearchByEmployeeNumber", Model.EmployeeNumber)
</div>
<script>
function DisplayBuyinInfo() {
$("#Results").load('@(Url.Action("_SearchByEmployeeNumber", "Bill", null, Request.Url.Scheme))?id=' + $("#EmployeeNumber").val());
};
$(document).ready(function() {
$('#EmployeeNumber').keypress(function (e) {
if (e.keyCode == 13)
$('#SubmitButton').click();
});
});
$(function() {
//$('#progressbar').hide();
//$('#SubmitButton').click(function() {
//$('#progressbar').show();
var progressbar = $("#progressbar"),
progressLabel = $(".progress-label");
progressbar.progressbar({
value: false,
change: function() {
progressLabel.text(progressbar.progressbar("value") + "%");
},
complete: function() {
progressLabel.text("Complete!");
}
});
function progress() {
var val = progressbar.progressbar("value") || 0;
progressbar.progressbar("value", val + 2);
if (val < 99) {
setTimeout(progress, 80);
}
}
setTimeout(progress, 2000);
});
//});
</script>
PartialView: _SearchByEmployeeNumber
-Controller
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult _SearchByEmployeeNumber(string id)
{
//...code left out for brevity
}
Eine andere Lösung besteht darin, die Benutzeroberfläche zu blockieren, während die Ajax-Anforderung mit einem Modal "Processing" oder etwas Ähnlichem ausgeführt wird. Ich weiß, dass dies Ihre Frage nicht beantwortet, aber ich werde gerne Code zur Verfügung stellen, wenn dies eine Option ist. – lopezbertoni