Bonjour,
J'ai un formulaire Ajax.BeginForm dans ma vue avec l'option LoadingElementId = "loading", pour exécuter un loader.gif
@using (Ajax.BeginForm("MessageError", new AjaxOptions
{
HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "error",
LoadingElementId = "loading",
}))
{
<div class="main">
<div class="input-group">
@Html.TextBoxFor(m => m.nissPat, new { autofocus = "autofocus", id = "inputNISS", @class = "form-control item", placeholder = "Veuillez encoder le numéro de registre national", autocomplete = "off", onfocus = "this.setSelectionRange(this.value.length, this.value.length);" })
<div class="input-group-append">
<button class="btn btn-secondary" type="submit">
<i class="fa fa-id-card"></i>
</button>
</div>
</div>
<div class="centrer">
<img id="loading" src="~/Content/images/loader.gif" style="display: none; text-align:center" runat="server" alt="Chargement en cours..." />
</div>
<div id="error">
@if (Model.Error != null)
{
{
Html.RenderAction("MessageError", Model);
}
}
</div>
</div>
}
Dans mon controleur j'ai donc l'action:
public ActionResult MessageError(EpiUgBrokaModel Pat = null)
{
string _url = EpiUgBrokaModel.C_URL_UGBROKA_TEST;
string _niss = Pat.nissPat;
EpiUgBrokaModel _pat = new EpiUgBrokaModel();
Erreur _erreur = new Erreur();
if (_niss == string.Empty || _niss == null)
{
_erreur.Id = 1037;
}
else if (_niss.Length < 15)
{
_erreur.Id = 1035;
}
else
{
Regex _digitsOnly = new Regex(@"[^\d]");
_niss = _digitsOnly.Replace(_niss, "");
if (EpiUgBrokaBusiness.IsValidNiss(_niss))
{
try
{
ServicesSoapClient _ugBroakaWS = new ServicesSoapClient();
RequestPatientPortalAccessTokenOnNationalNumberRequestBody _body = new RequestPatientPortalAccessTokenOnNationalNumberRequestBody();
_body.aNationalNumber = _niss;
_body.aNationalNumberType = NationalNumberType.One;
RequestPatientPortalAccessTokenOnNationalNumberRequest _nationalNumberRequest = new RequestPatientPortalAccessTokenOnNationalNumberRequest(_body);
System.Guid _token = _ugBroakaWS.RequestPatientPortalAccessTokenOnNationalNumber(_body.aNationalNumberType, _body.aNationalNumber);
_url += _token.ToString("D");
return JavaScript("window.location = '" + _url +"'");
//return JavaScript("window.open( '" + _url + "')");
//return JavaScript("window.location.replace('" +_url + "');");
//Response.RedirectPermanent(_url, true);
//return RedirectToAction("Index");
}
//Erreur UG quand le patient n'est pas connu d'UG
catch (System.ServiceModel.FaultException)
{
_erreur.Id = 1038;
}
catch (Exception _ex)
{
if (_ex.Message.ToString() != "Le thread a été abandonné.")//Tj l'erreur quand je fais appel au WCF
{
_erreur.Id = 1040;
}
}
}
else
{
_erreur.Id = 1036;
}
}
_erreur = EpiErrorBusiness.ErrorMessage(_erreur.Id);
_pat.Error = _erreur;
return PartialView("_ErrorMessagePartial", _pat);
}
}
Si j'ai une erreur cela renvoie vers
return PartialView("_ErrorMessagePartial", _pat);
mon loader fonctionne bien dans ce cas mais quand je n'ai pas d'erreur:
mon loader se coupe trop tôt car il rend la main via
return JavaScript("window.location = '" + _url +"'");
Il se lance bien mais dès qu'il passe dans le retur il se coupe, c'est logique mais il faut bien 10 secondes avant que le nouveau site s'affiche alors que le loader n'est plus visible pendant ce temps.
Comment faire pour que le loader soit visible jusqu'au moment où le second site"_url" s'affiche ?
PS: je suis obligé d'utiliser le
Ajax.BeginForm
Pour afficher l'erreur sans recharger ma page
D'avance merci