2009-03-26 8 views
5

J'ai une vue partielle ASP.NET MVC qui contient un Html.TextBox qui est configuré pour utiliser le datpicker de JQueryUI. Cela est effectué en vérifiant que le style est défini sur .datepicker. Tout a bien fonctionné. Cependant j'ai changé mes formes à Ajax.BeginForm et ai inclus un Ajax.ActionLink qui l'affiche après avoir cliqué sur le lien. Depuis l'ajout de cette datepicker ne s'affiche pas. En fait, aucun JavaScript qui fonctionnait précédemment n'est même invoqué après avoir renvoyé une vue partielle du contrôleur. Même si je mets JavaScript/JQuery dans la vue partielle elle ne l'utilise toujours pas. Je suis vraiment confus, quelqu'un peut-il m'aider?ASP.NET MVC jQueryUI datepicker ne fonctionne pas lors de l'utilisation de AJAX.BeginForm

exemples ci-dessous

<div id="claims"> 
     <div id="divViewClaims"> 
      <% Html.RenderPartial("ViewClaim", Model.Claims ?? null); %> 
     </div> 
     <br /><br /> 
     <div id="claim"> 
      <% Html.RenderPartial("AddEditClaim", new Claim()); %>   
     </div> 
    </div> 

action Link, lorsque les appels clickOn Action Controller pour revenir PartialView, Le JavaScript a appelé les feux onsuccess mais rien d'autre, qui était auparavant accroché par la fonction document.ready. Tous mes scripts sont dans des fichiers séparés et référencés dans la page maître.

<%= Ajax.ActionLink(string.Format("Add A{0} Claim", Model.Count > 0 ? "nother" : string.Empty), "AddClaim", "Driver", new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "claim", OnSuccess="showAddClaim" }, new { @class = "ControlLink" })%> 

Action Controller

public ActionResult AddClaim() 
{ 
     return PartialView("AddEditClaim", new Claim()); 
} 

Vue partielle, ce qui montre la zone de texte avec le style mis à datepicker

<% var ajaxOptions = new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divViewClaims", InsertionMode = InsertionMode.Replace, OnSuccess="hideAddClaim" }; %> 
     <% using (Ajax.BeginForm("AddEditClaim", "Claim", ajaxOptions, new { @name = "ClaimControl", @id = "ClaimControl" })) 
      { %> 

    <fieldset> 
     <legend><%= Model.Id==0?"Add":"Edit" %> Claim</legend> 
     <p> 
      <label for="Title">Claim Date</label> 
      <%= Html.TextBox("Date", Model.Date.ToString().TrimEnd('0', ':', ' ') ?? "", new { @class = "datepicker" })%> 
     </p> 

Je vous remercie de toute aide à ce sujet.

Répondre

3

Si l'élément est créé après document.ready, vous devez faire correspondre l'élément à jQuery.

Découvrez jQuery Live

+0

s'il vous plaît fournir plus de détails par exemple. – Nario

+0

Je suis d'accord Nario, c'est bien d'avoir une référence comme celle-ci, mais il vaut mieux avoir un exemple clair. –

1

Ce qui fonctionne pour moi est d'utiliser la propriété OnSuccess des AjaxOptions. Ainsi, votre code pourrait ressembler à ceci:

using (Ajax.BeginForm("AddEditClaim", "Claim", ajaxOptions, new { @name = "ClaimControl", @id = "ClaimControl", OnSuccess="the_javascript_function_below" }) 

the_javascript_function est le nom d'une fonction qui fait cela:

$(".datepicker").datepicker(); 
+0

J'essaie actuellement de faire exactement la même chose. mais jquery ne semble pas trouver ma zone de texte dans le div remplacé. des pistes à ce sujet? –

Questions connexes