2011-06-06 2 views
1

Je vais vous expliquer un scénario générique. Pour expliquer mon problème, je demanderais de la patience jusqu'à ce que j'explique comment j'ai implémenté ma page de recherche. J'ai une table [Users] et une table [Address] basée sur laquelle j'ai dérivé un VIEW dans SQL - [vw_User_Addr]. J'utilise L2S pour obtenir une classe vw_User_Addr fortement typée.Problème de recherche générique MVC et de validation de modèle

Maintenant, j'ai une page de recherche donc apparemment je vais le déduire de cette classe comme:

<%@ Page Title="User Search" ... Inherits="System.Web.Mvc.ViewPage<MyDAL.vw_User_Addr>" %> 

Mon action Liste retourne une liste que je l'utilise dans la vue pour former la table de la grille. Tout va bien jusqu'à ici. Maintenant, je veux implémenter la recherche sur cette page. Donc, c'est ce que j'ai trouvé -

  • Dans le contrôleur pendant l'action de liste, je crée ViewData ["Usr"] = new vw_User_Addr();
  • À mon avis je:

    <% MyDAL.vw_User_Addr usr = ((MyDAL.vw_User_Addr) (Viewdata [ "Usr"])); %>

  • Puis-je utiliser cet objet "usr" pour lier mon contrôle de recherche comme:

    <% = Html.TextBox ("FirstName", usr.FirstName)%>

  • Enfin, dans mon action de gestionnaire HttpPost je me objecte vw_User_Addr comme:

    [HttpPost] ActionResult publique Liste (vw_User_Addr searchObj) {...}

  • J'utilise cette searchObj pour extraire les valeurs utilisateur peut avoir dans les contrôles de population de recherche, puis-je effectuer la recherche.


Alors, je l'espère, je l'ai expliqué bien. C'est comme ça que je fais ma recherche dans MVC2. Here're mes préoccupations/questions:

  1. Lorsque je clique sur l'image bouton de recherche je reçois un postback mais il tire un ModelValidation qui donne l'erreur. Pas avec tout sauf au moins ceux qui sont int (c'est-à-dire comme le contrôle de liste déroulante Rôles) - comment gérer cela?

  2. Après beaucoup de R & D J'ai résolu que je devais soit faire un ModelState.Clear(); ou une façon plus complexe de gérer cela. Y a-t-il une meilleure option?

  3. Existe-t-il une meilleure façon d'effectuer la recherche-implémentation expliquée ci-dessus? Est-ce que j'utilise la meilleure façon de faire une recherche dans MVC?

  4. Au niveau de base, puis-je faire comprendre que ce L2S est un SQL-View et donc son Readonly tous les champs peuvent être NULL - de sorte que la Mr.DefaultModelValidator ne fonctionne pas ces validations illogiques?

  5. Si 4. est viable, puis-je définir les propriétés de tous les champs de la vue L2S en lecture seule pour l'essayer?

Merci pour votre temps et votre avis. SVP guide moi si je ne suis pas sur la bonne voie. Je crois que c'est le scénario de recherche le plus simple et donc ça doit être facile. Juste besoin de trouver les liens manquants.

Répondre

0

J'ai implémenté un ActionFilterAttribute [SkipModelValidation] qui évite/élimine la validation de modèle non désirée pour les pages de recherche.

Ref:How to disable validation in a HttpPost action in ASP.NET MVC 3?

public class SkipModelValidationAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      //Get ModelState 
      ModelStateDictionary dict = ((Controller)filterContext.Controller).ModelState; 

      if (dict != null && !dict.IsValid) 
       dict.Clear(); 

      base.OnActionExecuting(filterContext); 
     } 
    } 
Questions connexes