2013-04-25 2 views
1

Est-il possible d'accéder à la valeur d'une zone de texte dans la même vue? Par exemple, à mon avis, je la zone de texte ci-dessousComment déterminer la valeur d'une zone de texte dans la vue ASP MVC

@Html.TextBox("searchValue", ViewBag.CurrentFilter as string, new { placeholder = "Search" }) 

Si un utilisateur saisit une valeur, frappe puis soumettre, la page envoyer que les critères de recherche au contrôleur, interroger la base de données en fonction des critères et puis affichez les résultats dans la vue. Lorsque la vue est rendue à nouveau, le texte reste dans la zone de recherche et la balise est rendu

<input id="searchValue" name="searchValue" placeholder="Search" type="text" value="what i just typed in here" /> 

est-il un moyen pour une vue ASP MVC 3 pour accéder à la value de cette zone de texte? Je veux créer une condition similaire à

@if (searchValue.hasValue()) 
    { 
     do something in here 
    } 
+0

Qu'essayez-vous exactement de faire dans les conditions? –

+0

Vous pouvez ajouter du contenu à la page selon que cette zone de texte a une valeur ou non – NealR

+0

pouvez-vous le faire dans JQuery? en vérifiant '$ ('# searchValue'). Val()' et ensuite Ajax post/Get si nécessaire? –

Répondre

2

La vue est rendue de manière synchrone, lorsque chargement de la page. Toutes les expressions Razor sont évaluées lors du rendu de la page, ce que vous obtenez est le HTML statique. Vous ne pouvez pas l'utiliser pour suivre les modifications ultérieures apportées aux valeurs de formulaire, mais uniquement pour exécuter une logique basée sur leurs valeurs initiales pour la réponse en cours.

Vous devez utiliser Javascript. Supposons que vous ayez un lien avec un id de myLink. Style à display:none; par défaut. Puis, avec jQuery, vous pouvez effectuer les opérations suivantes:

<input id="searchValue" name="searchValue" ... /> 

<script type="text/javascript"> 
    $('#searchValue').change(function(){ 
     if($('#searchValue').val().length > 0) { 
      $('#myLink').show(); 
     } else { 
      $('#myLink').hide(); 
     } 
    }); 
</script> 

Si vous avez besoin logique plus complexe, vous pouvez passer le lien avec une vue partielle et mettre à jour avec des appels AJAX.

1

Peut-être que j'ai mal compris, mais il semble que vous peuplez le champ de recherche avec ViewBag.CurrentFilter puis « Quand la vue est rendue à nouveau, le texte reste dans la zone de recherche » comme « value = » ce que je viens tapées dans »

ce qui me semble comme vous le savez déjà ce que le texte de recherche est, alors pourquoi avez-vous besoin de lire la valeur de la zone de texte? Pourquoi ne pas la logique est

@if (`ViewBag.CurrentFilter` hasSomeValue) 
{ 
    do something in here 
} 

Désolé à l'avance si je manquais le point

+1

Je pense que la question concerne la dissimulation dynamique et la projection contenu basé sur la valeur * actuelle de la zone de texte lors de son changement *, pour lequel il a besoin de jQuery. –

Questions connexes