2011-01-13 16 views
2

Ich habe Probleme herauszufinden, wie man Folgendes macht:MVC2 - Wie setzen gemeinsame LOGIC Kontrolle (wie Suchen/Finden) auf jeder Seite?

Auf jeder Seite (oder jeder Seite, die ich so wünsche), würde ich gerne ein gemeinsames Steuerelement Widget (zB Think - Search - Funktionalität, die ein enthält Textfeld + Schaltfläche). Was ist der beste Weg dies zu tun, und wer behandelt den Submit-Button (vorausgesetzt, es ist ein Submit-Button)?

. Wie sieht mein ViewUserControl aus? Hat es eine Form? verwendet es jQuery onclick ""? Wird es an die Aktionsmethode der Hauptansicht gesendet oder kann ich sie an einen anderen Controller/eine andere Aktion umleiten?

Ich habe versucht, RenderAction von einem "Search.ascx", die ein Formular enthält, und wird von meinem SearchController behandelt ... aber in der SearchController versucht es RedirectToAction aufrufen ... und ich bekomme eine Beschwerde über RedirectActions für untergeordnete Aktionen nicht zulässig.

Ich bin ein bisschen verloren auf was als nächstes zu tun, so dass Vorschläge sehr willkommen! Ray

Antwort

0

Die HTML-Elemente lassen sich am besten anzeigen, wenn Sie sie in eine Musterseite oder in eine Teilvorlage einfügen, die von Ihrer Musterseite referenziert wird. Ich möchte, dass es ein eigenes Formular ist und sende es an deinen SearchController.

Lassen Sie mich wissen, wenn Sie weitere Einzelheiten wünschen.

0

RenderPartial ist der Weg, hier zu gehen. Ihr control.ascx besteht aus der Schaltfläche zum Senden und Senden von Formularen.

1

Sie scheinen auf dem richtigen Weg zu sein (mit ViewUserControl und RenderPartial). Aber mit den von Ihnen bereitgestellten Informationen, ist es nicht einfach, zu sehen, was andere Probleme sind (Render, ...)

Es ist einfach:

  • ein Benutzersteuerelement erstellen (ASCX) und eine form in dort mit URL sein/search/..., etwas, das du zurückbekommst.
  • Rufen Sie in Ihren Ansichten RenderPartial auf und geben Sie den Namen der Ansicht an
  • Erstellen Sie Ihren Controller, um den Beitrag von Ihrer Suche zu erhalten. Dies ist nicht derselbe Controller wie Ihr übergeordneter View-Controller.
+0

Nissen picky ich würde umformulieren "Dies ist nicht der gleiche Controller .." zu sein "Dies ist nicht unbedingt der gleiche Controller ...", da Search könnte eine Aktion auf dem Controller, Ray arbeitet an. [Die Chancen stehen gut, dass ein Search-Controller zwar geeignet ist ...] –

0

Was ist der beste Weg, um diese

Wahrscheinlich eine Teilansicht zu tun. Eine ASCX-Datei.

und wer handhabt die Übermittlungsschaltfläche (vorausgesetzt, es ist eine Absenden-Schaltfläche)?

Die Teilansicht

was mein Viewusercontrol sieht wie? Hat es eine Form?

Ja, es hat eine Form. Es sollte so eigenständig wie möglich sein.

verwendet es jQuery onclick ""? Ist es Beitrag auf die Hauptansicht Aktionsmethode, oder kann ich es umleiten zu einem anderen Controller/Action?

Nun, was immer für Ihr genaues Szenario am besten passt. Es sollte wahrscheinlich auf die jeweils passendste Aktion gepostet werden. Dies ist wahrscheinlich nicht die Aktion der Hauptansicht, da die Teilansicht in verschiedenen übergeordneten Ansichten wiederverwendet wird.

Ich habe mit Render eines „Search.ascx“ versucht, die ein Formular enthält, und wird von meinem SearchController behandelt ... aber in den SearchController, versucht es dann zu Anruf RedirectToAction .. und ich bekomme eine Beschwerde über RedirectActions nicht für Child Aktionen erlaubt.

Sie werden wahrscheinlich mit RenderPartial in der übergeordneten Ansicht machen möchten:

<%: Html.RenderPartial("MyPartialView.ascx") %> 
0

Ok, habe ich herausgefunden, was mein Problem war. Die obigen Antworten sind korrekt. Ich habe mein eigenes Search.ascx-Benutzersteuerelement und SearchController, ich habe auch RenderPartial verwendet, aber was mich verblüfft hat war, dass ich vergessen habe, den Controller/die Aktion explizit anzugeben ... also habe ich dann mit onclick events und Url.Action auf meinem herumgespielt Knopf stattdessen.

<% using (Html.BeginForm("MySearchAction", "MySearchController")) { %> 

Vielen Dank an alle, die geantwortet haben.