| 

.NET C# Java Javascript Exception

4
Hallo Zusammen,
ich bin gerade dabei eine MVC3 Webanwendung zu implementieren. Ich muss dazusagen, dass ich im Web-Bereich nicht sonderlich viel Ahnung habe. Die Anwendung besteht bisher aus 6 Controllern und mehr als 10 Views.

Jetzt benötige ich in fast jeder Controller Methode eine ConnectionId die ich auf der Startseite auswählen kann. Ich muss mir diese ID also nach dem Auswählen irgendwie merken. Bisher hab ich das über eine Controller-Erweiterungsmethode gemacht und hab mir die ID in einem Cookie gemerkt (zuerst hab ich die Session benutzt => gleiches Problem). Somit kann ich die ID in jeder Methode abfragen bzw. zuweisen.

Die Lösung hat allerdings den Nachteil, dass ich immer nur eine ID pro Browser auswählen kann. Das bedeutet, wenn ich ein zweites Tab öffne und dort die ID umsetzte ist die ID für alle laufenden Instanzen umgesetzt und das ist nicht gewollt.

Die einzige Lösung die ich bisher gefunden hab ist über ein hidden Input-Field. Also müsste ich wohl bei jeder Controller-Methode immer die ID mitgeben. Oder ich benutzte ein Basis-Model mit der Connection-Id als Property. Wie bekomme ich aber diese ID bzw. das Model bei jedem Controller Aufruf mitgeliefert? Wenn ich zum Beispiel nur die Seite aktualisiere, ist das Model (wenn ich es als Parameter setzte) schon nicht initialisiert.

Irgendwie komme ich an der Stelle nicht weiter und hab bisher keine Lösung gefunden.
07.11.2012
PinBack 687 1 8
2 Antworten
2
Pack es in die URL rein. /{controller}/{action}/{id}

Jedes mal wenn du eine Link mit URL.Action(..) oder Html.Action(...) bastelst, wird die bestehende Id wieder erstellt, sofern du nicht explizit eine neue übergibst.

Dann nur noch in jede Action Methode von deinen Controllern einbauen

public class MyController
{
public ActionResult MyAction(int id) {...}

public ActionResult MyAction1(int id, ...) {...}

public ActionResult MyAction2(int id, ...) {...}
}
07.11.2012
phipu 287 1 8
Also ich bekomme es nicht richtig hin:
public ActionResult Index(int id = 0){…}

public ActionResult SelectConnection(int connectionid = 0)
{

return RedirectToAction("Index", new { id = connectionid });
}
Danach steht in der Url z.B. /Home/Index/4 und das Refresh funktioniert.
Dafür schon mal danke.
Aber wenn ich jetzt einen weiteren Link baue z.B. @Html.ActionLink("TestLink", "TestConnection")

Dann wird in der Controller Methode keine Id übergeben.
public ActionResult TestConnection(int id = 0)
{

}
Hier ist die id immer 0.
Wie muss ich den ActionLink korrekt bauen?
PinBack 07.11.2012
Müsste funktionieren. Kannst ja mal versuchen die ID explizit anzugeben. Im Controller die Id ins Viewmodell reinpacken und dann bei ActionLink explizit angeben: @Html.ActionLink("TestLink", "TestConnection", new {id = Model.ConnectionId})
phipu 08.11.2012
Die Id wird nur implizit bei Html.ActionLink() verwendet, wenn dieser in RouteData vorhanden ist. Wenn RouteData.Values["ID"] Null ist, funktioniert es nicht.
phipu 08.11.2012
Also schon mal vielen Dank für deine Mühe. Ich hab gestern noch fast alles umgestellt und hab die Id überall übergeben. Dabei verstehe ich nicht, dass ich bei manchen ActionLinks die Id explizit setzen (wie du oben beschrieben hast new {id = model.ConnectionId}) muss und bei anderen nicht. In einer View hab ich 2 ActionLinks nebeneinander wobei bei dem ersten Link die Id in den Controller übergeben wird und bei der zweiten nicht? Der erste Link Liegt das an RouteData und wie kann man das ändern?
PinBack 08.11.2012
0
Hab leider auch nicht viel Ahnung von Webentwicklung, aber ich würd dir vorschlagen, die ID in eine View zu Pushen und von dort aus wieder abzufragen.
Weiß aber nicht genau ob das in deinem Fall geht, aber vllt is es schonmal ein Lösungsansatz.
08.11.2012
DerPunk 1,2k 1 7

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH