2010-11-01 9 views
4

je le bloc de code suivantOù couper les paramètres de demande entrants?

public ActionResult Tabs(SearchViewModel svm) 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     svm.Summary = _entitySearchService.GetSearchDataSummary(svm.Search); 
     return PartialView(svm); 
    } 
    else 
    { 
     return RedirectToAction("QuickSearch", "Search" 
      , new RouteValueDictionary { { "search", svm.Search } }); 
    } 
} 

si l'utilisateur soumet une recherche qui se termine par un espace, par exemple "Quelque chose", cela fonctionne bien si c'est une requête ajax, mais si ce n'est pas une requête ajax, la requête est redirigée vers une autre méthode d'action, à quel point quelque chose ne va pas et un 404 est retourné.

Je pourrais faire un trim() dans la clause else, par exemple.

new RouteValueDictionary { { "search", svm.Search.Trim() } }

mais il y a quelques endroits que cela se produit. Idéalement, je pourrais tout faire au même endroit.

Serait-il considéré comme trop hackish si je le mets dans la méthode Initialize du contrôleur?

protected override void Initialize(RequestContext requestContext) 
    { 
     // do a test to see if there's a 'search' parameter in requestContext, 
     // and if so, trim it 

     base.Initialize(requestContext); 
    }  

Ou y a-t-il un autre meilleur moyen?

Répondre

0

Vous pouvez passer outre le poseur de votre SearchViewModel si cela est une option

public class SearchViewModel 
{ 
    ... 

    private string search; 

    public string Search 
    { 
     get 
     { 
     return search; 
     } 
     set 
     { 
     search = value.Trim(); 
     } 
    } 

    ... 
} 
Questions connexes