2010-08-21 7 views
0

Je travaille sur une application dans laquelle les contrôles de validation (plages) sont contrôlés dans la couche logique métier. Le code ressemble à ceci:Définition du focus TextBox dans BLL ASP.NET

public string ValidateRange(int value, int lowRange, int highRange, string fieldDesc, System.Web.UI.WebControls.TextBox txtBox) 
{ 
    string msg = ""; 

    if (value >= lowRange & value <= highRange) 
     msg = ""; 
    else 
    { 
     msg = "Please enter a value between " + lowRange + " and " + highRange + " for \"" + fieldDesc + ".\""; 
     txtBox.Focus(); 
    } 

    return msg; 
} 

Je suis sûr que je fais ce que quelqu'un à tort j'espérais donc peut me expliquer la façon la plus efficace de gérer la fonction et BLL afin qu'il puisse passer à le calque de présentation bien. Mon espoir est que je peux limiter mon interaction avec les contrôles BLL à ValidateRange sur les contrôles TextBox du formulaire avec un retour pour chacun. Si j'aborde cela incorrectement, s'il vous plaît faites le moi savoir. Si cela fonctionne de cette façon, comment puis-je autoriser la BLL à accéder aux TextBox à partir du calque de présentation?

Merci pour votre aide.

Répondre

1

Je n'essaierais pas d'avoir le BLL en désordre avec des textboxes ou tout ce qui est lié à la présentation. Après tout, le BLL est censé être agnostique de présentation. Sinon, si vous avez besoin d'écrire, disons, une couche de présentation Windows Forms (pour aller avec votre ASP.NET), vous devrez réécrire ou ajouter toutes les nouvelles méthodes sur votre BLL pour prendre en charge System.Windows.Forms .TextBox aussi bien! Cela va à l'encontre du but de n-tier si les deux couches de présentation ne peuvent pas partager les mêmes méthodes/codes BLL. Non, vous voudrez supprimer toute trace de textboxes et autres de la BLL et écrire du code pour la mise au point automatique des zones de texte invalides dans la couche de présentation elle-même.

Si vous utilisez les éléments de validation intégrés d'ASP.NET (Page.IsValid et CausesValidation et autres), vous devrez simplement vérifier quel validateur est revenu false et définir le focus de cette façon. Vous pouvez toujours avoir votre BLL fournir le message d'erreur. Par exemple, à l'aide d'un CustomValidator, vous pouvez appeler votre méthode BLL ValidateRange. Si la valeur renvoyée est String.Empty, renvoyez true (valide). Si elle est non vide/non nulle, vous savez que vous avez une erreur. Définissez les propriétés ErrorMessage et/ou Text du CustomValidator sur la chaîne renvoyée, puis renvoyez false (non valide).

+0

Nous avons reçu l'instruction de ne pas utiliser les validateurs ASP.NET. J'essaierai donc d'examiner et d'incorporer la méthode de mise en cache automatique des zones de texte invalides. Merci. – Robert

Questions connexes