2009-09-18 7 views
6

Ich habe eine Teilansicht, die von mehreren Ansichten gerendert wird, die von mehreren Aktionsmethoden zurückgegeben werden.ASP.NET MVC - Wie bekomme ich die aktuelle Aktion aus einer Teilansicht?

Die Teilansicht hat ein Formular, das zurück an die aufgerufene Aktionsmethode gesendet werden soll.

Es ist mein Verständnis, dass, wenn ich nenne nur

<% Html.BeginForm(); %> 

aus einer Ansicht, die Klage der Form Attribut wird an die gerufene Aktion-Methode verweisen. Ich kann das nicht, weil ich das ID-Attribut des Formulars für Javascript-Zwecke festlegen muss. Die Überladung von Html.BeginForm, die HTML-Attribute setzen lässt, erfordert auch einen expliziten Controller und eine Aktion. Anstatt also die HTML-Helfer zu verwenden, könnte ich schreiben Sie einfach das Formular Element aus wie:

<form action="<%=(NEED TO SOMEHOW GET THE URL TO THE CURRENT ACTION) %>" method="post" id="myForm"> 

Ich bin nur nicht sicher, wie die URL zu erhalten.

Antwort

14

Nur Null für den Controller und Aktion übergeben. Die korrekten Werte werden ersetzt. ZB:

<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "employeeGroupForm" })) 
+1

+1 - Sicher, da ist mein Weg, und dann gibt es den einfachen Weg :) –

+0

Hat mich zum Lachen gebracht! :) –

0

In dieser Situation würde ich wahrscheinlich nur den Controller (oder die Elternansicht) die entsprechende Ziel-URL in Ihrem Modell/ViewData setzen.

Was, wie, in Ihrem Controller:

public ActionResult MyAction() { 
    MyModel m = new MyModel(); 

    ... 

    m.MyControlAction = "MyAction"; 
    m.MyControlController = "MyController"; 

    return View("MyView", m); 
} 

Dann Ihre Ansicht:

Html.RenderPartial("MyControl", ViewData.Model); 

Und in Ihrer Teilansicht:

Html.BeginForm(ViewData.Model.MyControlController, ViewData.Model.MyControlAction, ...) 

Für eine saubere Design, Sie würde wahrscheinlich wollen, dass die MyControlController und MyControlAction Mitglieder von einem Interface kommen, dass jedes Modell das verwendet diese Kontrolle muss implementieren. Dann muss die Teilansicht ein stark typisiertes Modell mit diesem Schnittstellentyp verwenden.

+0

vereinbart getan, es scheint, dass das Hinzufügen dieser zu dem Bildschirmtextsystem die direkteste Sache wäre machen. – Amir

+0

Craigs Antwort funktionierte für mich, aber wie kann man die aktuelle URL in den Controller bekommen? Wenn ich das machen würde, würde ich wahrscheinlich die URL in viewdata von einer überschriebenen onactionexecuting-Methode speichern, so dass ich es nicht in jeder Aktionsmethode machen müsste. –

+0

@Ronnie - Sie brauchen nicht die aktuelle URL per se, Sie brauchen nur den aktuellen Controller und Aktion - was Sie natürlich wissen würden, wenn Sie in der Aktionsmethode eines Controllers sind :) –

2

ViewContext.RouteData.Values ​​[ „action“]

Oder etwas Ähnliches bekommt den Job

+0

Ich kenne die Aktion zur Entwurfszeit nicht. –

+0

Entschuldigung korrigiert den Aufruf, der den Aktionswert von der routeData verwendet, um die richtige Aktion zu finden. – AndreasN

Verwandte Themen