2016-07-31 2 views
0

J'ai un projet MVC4 où j'ai utilisé NuGet pour installer jQuery 3.1.0 et Microsoft.jQuery.Unobtrusive.Ajax 3.2.3. Mon paquet est le suivant:Conflit entre ajax discret et jQuery

bundles.Add(new ScriptBundle("~/bundles/scripts").Include(
      "~/Scripts/jquery-3.1.0.min.js", 
      "~/Scripts/jquery.unobtrusive-ajax.min.js", 
      "~/Scripts/jquery.hoverIntent.minified.js", 
      "~/Scripts/newScript.js", 
      "~/Scripts/nav.js" 
      )); 

J'ai une vue qui contient un bloc Ajax.BeginForm comme ceci:

@using (Ajax.BeginForm("ValidateBASFID", new AjaxOptions { UpdateTargetId = "ValidateBASFIDError", InsertionMode = InsertionMode.Replace })) 
{ 
    <label class="required">BASF ID</label>@Html.ValidationMessageFor(model => model.BASFID, "", new { @class = "text-danger" }) 
    @Html.TextBoxFor(model => model.BASFID, new { style = "width: 50px; margin-right:20px; float:left;", @class = "form-control" }) 
    <input type="submit" value="Validate with BASF ID" class="smallButton" style="float:left;" /> 
    <div id="ValidateBASFIDError" class="validationError text-danger"></div> 
    <div style="clear:both;"></div> 
} 

Ce point de bloc à une action de contrôleur comme ceci:

public ActionResult ValidateBASFID(string BASFID) 
{ 
    Models.Repositories.SectionRepository _repository = new Models.Repositories.SectionRepository(); 
    MemberVM Member = _repository.ValidateBASFID(BASFID); 

    if (Member != null) 
    { 
     Member.SaveMemberInfo(); 

     return RedirectToAction("Sections", new 
     { 
      SectionSignupMasterID = Member.SectionSignupMasterID, 
      VerificationEmail = Member.Email, 
      MemberName = Member.FullName 
     }); 
    } 
    else 
    { 
     ViewBag.Message = "Invalid BASF ID"; 
     return PartialView("_ValidationError"); 
    } 
} 

L'idée est que j'utiliserai AJAX pour afficher une valeur d'ID et la tester. Si l'ID est valide, je redirige vers la vue Sections. Si l'ID n'est pas valide, un message d'erreur est renvoyé.

Qu'est-ce qui se passe est qu'un ID valide redirige vers la vue Sections, mais la page ne s'affiche pas. La seule chose affichée est l'année. Il dit juste "2016" dans le coin supérieur gauche de la page. La page est également bloquée en essayant de récupérer une image d'un domaine différent.

Si je ne commente que l'ajax discret hors de l'ensemble, la redirection de la vue fonctionne bien (mais je ne peux pas récupérer le message d'erreur si l'ID n'est pas valide). Si je commente seulement le jQuery hors de l'ensemble, la redirection de vue fonctionne bien (mais le code d'autre client est cassé). Pourquoi ces deux bibliothèques de scripts ne semblent-elles pas bien fonctionner ensemble? Que puis-je faire pour obtenir plus d'informations sur ce qui se passe ici? Merci.

+0

Vous faites un ajax tout. Tout le point d'ajax à rester sur la même page. Ils ne redirigent jamais. Faites une soumission normale, et s'il y a une erreur, ajoutez un 'ModelStateError' et renvoyez la vue –

Répondre

0

Stephen a raison. J'ai joué un peu avec le code et j'ai trouvé que la vue Sections entière essayait de charger dans la cible de l'ajax.beginform. Il a échoué en raison d'un peu de javascript au bas de la page, mais Ajax n'est pas pour la redirection.

La raison pour laquelle cela a fonctionné lorsque j'ai commenté la bibliothèque discrète ou jQuery était parce que je rompais ajax et il faisait juste une publication standard. MISE À JOUR: J'ai trouvé un article here aussi par Stephen qui a résolu mon problème.