2009-05-21 10 views

Antwort

6

Der gesuchte Text muss als Teil des Modells verfügbar sein, das an die Ansicht zurückgegeben wird. Dann haben Sie zwei Optionen:

Mit RenderPartial wird die zurückgegebene Ansicht an die Teilansicht übergeben, damit Sie von dort auf den gewünschten Wert zugreifen können.

Html.RenderPartial("PartialView"); 

Alternativ können Sie die Zeichenfolge als Modell für die Teilansicht passieren

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

mit welchem ​​Sinn machen könnte, wenn Sie die keine Ergebnisse Teilansicht mit verschiedenen Modellen verwendet werden sollen.

+0

Ich musste es als Teil des Modells hinzufügen. Jetzt muss ich meinen Code umgestalten :) – ddd

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

Dies übergibt ein Objekt Viewdata [ „departmentGrid“] (dies kommt von Bildschirmtextsystem der nicht-Teilansicht) zu der Teilansicht SimpleTrustGridViewer.

vereinfacht:

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

Und Ihre Teilansicht erbt wie folgt aus:

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

Dann wird in der Teilansicht 'Model' der übergebenen Zeichenkette.

0

Teilansicht, es sei denn, Sie übergeben etwas anderes explizit, hat das gleiche Modell wie die Elternansicht.

1

Das ViewDataDictionary, das vom Controller an die Ansicht übergeben wird, ist dasselbe, das von der Ansicht an die Teilansicht übergeben wurde. Wenn also die Zeichenfolge, die übergeben werden soll, im ViewDataDictionary enthalten ist, müssen Sie sie nicht übergeben.

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

Aber man kann die gleiche Ansicht verwenden, ob es Ergebnisse waren oder nicht:

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

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

Ich stimme dir zu, aber ich bevorzuge ein stark typisiertes Modell statt ViewData und Modell zu mischen. Mein Modell hätte 2 Requisiten (Refactoring freundlich Code: D), Klasse SearchResult { öffentliche IList List {Get; set;} öffentliche Zeichenkette Abfrage {get; einstellen;} } –

0

Zwei Möglichkeiten (? Sie sprechen Ansichten, nicht Teilansichten rechts) 1) in dem Controller einfach Rufen Sie eine andere Ansicht auf, wenn keine Ergebnisse eine Zeichenfolge als Modell übergeben 2) Erstellen Sie ein Modell mit einem Suchstatus (gefunden x Elemente, keine Übereinstimmung gefunden, etc ...) und eine Liste von Ergebnissen in derselben Ansicht, so dass die Ansicht, um die verschiedenen Ergebnisse mit einer switch-Anweisung zu rendern.

1

Ich habe das versucht und konnte es nicht zum Laufen bringen. Sagen wir, ich

<div id="SearchBar"> 


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

haben Und wenn ich versuche, wie so den Suchtext in dieser Ansicht anzuzeigen:

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

Mein Textfeld ist leer.

1

Sie können jquery und load() Aktion auf div-Tag verwenden, anstatt partiell; Das Ergebnis ist ähnlich. Die load() AJAX-Methode ruft den Controller mit dem gewünschten Text auf. wie:

$('#divId').load('url/'+ serch content); 
Verwandte Themen