2009-05-21 8 views

Répondre

6

Le texte recherché doit être disponible dans le modèle renvoyé à la vue. Ensuite, vous avez deux options -

L'utilisation de RenderPartial passera la vue retournée à la vue partielle afin que vous puissiez accéder à la valeur que vous voulez à partir de là.

Html.RenderPartial("PartialView"); 

Vous pouvez passer la chaîne comme modèle pour la vue partielle en utilisant

Html.RenderPartial("PartialView", Model.SearchedText); 

Ce qui pourrait donner un sens si vous voulez utiliser la vue partielle aucun résultat avec différents modèles.

+0

Je devais l'ajouter comme partie du modèle. Maintenant, j'ai besoin de refactoriser mon code :) – ddd

3
<%Html.RenderPartial("SimpleTrustGridViewer", ViewData["departmentGrid"]); %> 

cette passe un objet Viewdata [ "departmentGrid"] (ce qui provient de vidéotex de la vue partielle non) à la SimpleTrustGridViewer vue partielle.

simplifié:

<%Html.RenderPartial("myUserControl", myString); %> 

Et votre vue partielle hérite comme ceci:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %> 

Ensuite, dans votre vue partielle 'Model' sera la chaîne passée.

0

Vue partielle sauf si vous lui transmettez autre chose explicitement, a le même modèle que la vue parent.

1

Le ViewDataDictionary transmis du contrôleur à la vue sera le même que celui transmis de la vue à la vue partielle. Donc, si la chaîne que vous voulez transmettre se trouve dans ViewDataDictionary, vous n'avez pas besoin de la transmettre.

<%=Html.RenderPartial("NorResultFound")) %> 

Mais vous pouvez utiliser la même vue que les résultats étaient ou non:

<%if (Model.ResultCount!=0){ %> 
<%foreach(var result in Model){ %> 
<%= // display results %> 
<%}}%> 

<%else {%> 
<p>There is no results for <%=ViewData["keyword"]%> </p> 
<%} %> 
+0

Je suis d'accord avec vous, mais je préfère utiliser un modèle fortement typé au lieu de mixin 'ViewData et le modèle. Mon modèle aurait 2 accessoires (refactoring code amical: D), class SearchResult { public IList Liste {get; set;} public string Requête {get; ensemble;} } –

0

Deux façons (? Vous parlez de vues, pas une vue partielle droite) 1) dans votre contrôleur tout appeler une vue différente dans le cas où aucun résultat ne passe une chaîne comme modèle 2) créer un modèle contenant un état de recherche (trouvé x éléments, aucune correspondance trouvée, etc ...) et une liste de résultats dans la même vue, permettant le vue pour rendre les différents résultats avec une instruction switch.

1

J'ai essayé ceci et je n'ai pas réussi à le faire fonctionner. Dire que j'ai

<div id="SearchBar"> 


<% using (Html.BeginForm("IndexNoJavaScript", "Home")) 
{%> 
<%= Html.TextBox("SearchTextBox", ViewData["SearchText"]) %> 
    <input type="submit" value="Search" /> <% } %> 
    </div> 
<% Html.RenderPartial("SearchResults"); %> 

Et lorsque je tente d'afficher le texte de recherche dans ce point de vue comme ceci:

<%= Html.TextBox("SearchedText", ViewData["SearchText"]) %> 

Ma zone de texte est vide.

1

Vous pouvez utiliser l'action jquery et load() sur une balise div, en utilisant l'utilisation partielle; le résultat est similaire. La méthode load() ajax appelle le contrôleur avec le texte que vous voulez. comme:

$('#divId').load('url/'+ serch content); 
Questions connexes