2010-08-25 4 views
1

Je définis ce DateTime.ascxDateTime -> Zone de texte (jquery!) -> EditorFor (DateTime.ascx) -> ajouter un événement javascript. Comment?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" %> 
<%: Html.TextBox( string.Empty, 
        (Model.HasValue ? Model.Value.ToString("dd.MM.yyyy") : string.Empty), 
        new { @class = "whatever" 

         } 
       )%> 

et le site ASPX semble si:

<%: Html.EditorFor(model => model.Data.birthday) %> 

L'idée est maintenant qu'une fonction javascript est appelée "ABC()" lorsque la zone de texte perd le focus (signifie événement "onBlur") (idéalement: la valeur de la trextbox est passée à la fonction appelée "ABC (birtday.value)") Mais je ne voudrais pas changer le DateTime.ascx pour finir que ALL (!) EditorFor (pour Datetimes) aura un appel de fonction javascript!

Mes essais: Ce

<%: Html.EditorFor(model => model.Data.birthday, "onBlur='javascript:ABC();'", "birthday") %> 

résultats dans

<input class="whatever" id="birthday" name="birthday" type="text" value="25.08.2010" /> 

mais l'appel de fonction onBlur/javascript est pas ensemble.

Et

<%: Html.EditorFor(model => model.Data.birthday, new { onClick="javascript:ShowHideC1();"}) %> 

travail ne marche pas non plus.

(étape suivante est alors que cette zone de texte est « bien sûr » un datepicker jquery ;-)

Répondre

1

Peut-être que cela peut vous aider:

MVC 2 Editor Template with DateTime

+0

thx pour la réponse très rapide. Mais il y a "juste" expliqué comment manipuler/développer le datpicker. J'ai besoin d'un moyen d'appeler une fonction javascript ABC() quand jamais le datepicker perd le focus. D'accord. Je peux développer (en quelque sorte) les 5 événements jquery déjà existants. Mais alors j'ai le problème d'élever cet événement jquery nouvellement ajouté? (Nous tournons autour, n'est-ce pas?) – user415876

2

Oui, son stupide pour répondre à la propre question, mais je veux partager ma connaissance. ;-)

Solution:

NE PAS utiliser le Html.EditorFor!

utilisez le TextBoxesFor!

<%: Html.TextBoxFor(model => model.Data.birthday, new { onBlur="javascript:ABC();"})%> 

L'utilisation de TextBoxFor signifie que DateTime.ascx n'est PAS utilisé. Lorsque "... anniversaire" est défini sur une valeur non nulle dans le contrôleur, la sortie n'est pas formalisée comme dans DateTime.ascx défini. Signifie également que les heures, minutes et heures seront affichées. Mais l'événement OnBlur est ajouté! Et c'était le but!

1

Vous pouvez utiliser Html.EditorFor, mais vous devrez lier les événements séparément:

$(document).ready(function() { 
// bind events to template editors 
$("#Data_birthday").bind('blur', ABC); 
$("#Data_birthday").bind('click', ShowHideC1); 
} 
Questions connexes