2012-06-12 15 views
7

Also ich habe eine ViewBag.Something und diese Daten werden zufällig generiert. Aus meiner Sicht habe ich dies auf ein Label wie dieses gesetzt @Html.LabelFor(m => m.Something, (string)ViewBag.Something). Das funktioniert gut, aber wenn ich das Formular übergebe, könnte es Fehler geben und wenn es Fehler gibt, brauche ich dieses Label, um gleich zu bleiben. Ich möchte keine dynamischen/zufälligen Daten mehr, also würde ich die Controller-Methode, die generiert wurde, nicht aufrufen dieser ViewBag. Gibt es eine Möglichkeit, diesen Wert beizubehalten, ohne eine private Variable in meinem Controller zu haben? Eine nette Möglichkeit, dass MVC/Razor es tut?Wie können ViewBag-Daten nach einem Formular-Post gespeichert werden?

Antwort

1

In der get, richten Sie ein Modell, stellen Sie es dynamisch und wenn return view() ausgeführt wird, tun return view(model). Richten Sie dann in der Ansicht ein ausgeblendetes Feld ein, das den erforderlichen Wert weiterreichen kann. Ich habe mich für diesen Weg entschieden, weil ich mir keine Server-Codes zulegen muss, um dies auf einem Post zu erledigen, und ich muss mir keine Gedanken über Sitzungen machen.

+0

Dies hat ein Sicherheitsproblem. Wenn jemand den Code inspiziert, kann er die Daten erhalten oder sogar ändern ... Auch was, wenn es ein Objekt ist? – Nick

12

Option 1:

Geben Sie den Wert von "ViewBag.Something" an den Controller durch Route Werte mit:

@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something }) 

Option 2: Sie TempData verwenden können.

public ActionResult Index() 
{ 
var Something = "YOURVALUE"; 
TempData["Something"] = Something; 
....... 
} 


public ActionResult OtherAction() 
{ 
    var Something = TempData["Something "]; 
    ........... 
} 

Passing Zustand zwischen Aktionsmethoden

Aktion Methoden, um Daten an eine andere Aktion passieren könnte, wie zum Beispiel, wenn ein Fehler auftritt, wenn ein Formular geschrieben wird, oder wenn die Methode, um zusätzliche umleiten müssen Methoden, die auftreten können, wenn der Benutzer zu einer Anmeldesicht und dann zurück zur ursprünglichen Aktionsmethode geleitet wird.

Eine Aktionsmethode kann Daten im TempDataDictionary-Objekt des Controllers speichern, bevor sie die RedirectToAction-Methode des Controllers aufruft, um die nächste Aktion aufzurufen. Der TempData-Eigenschaftswert wird im Sitzungszustand gespeichert. Jede Aktionsmethode, die nach dem Festlegen des TempDataDictionary-Werts aufgerufen wird, kann Werte vom Objekt abrufen und sie dann verarbeiten oder anzeigen. Der Wert von TempData bleibt bestehen, bis es gelesen wird oder bis die Sitzung abläuft. Wenn Sie TempData auf diese Weise beibehalten, können Sie Szenarien wie die Umleitung verwenden, da die Werte in TempData über eine einzige Anforderung hinaus verfügbar sind.

+0

so würde ich speichern ViewBag.Something in einem TempData wenn ich einreichen getroffen und Wenn etwas schief geht, steht es zur Verfügung? Das könnte zu Problemen führen, weil mein Label aus dem ViewBag geladen wird und ich denke, jetzt muss ich eine Art von if haben? – Pittfall

+0

Siehe mein Update für eine weitere Option, die Sie ausprobieren können. –

+0

Danke für die Hilfe, es sieht gut aus, aber ich ging in eine andere Richtung, so kann ich Ihre Antwort nicht akzeptieren – Pittfall

-1

angezeigte Nachricht in viewbag nach der Einlieferung (I Benutzer dieser Methode)

ActionResult SubmitUser(){ 

    ViewBag.Msg =TempData["Msg"]; 

    return view(); 
} 


[HtttpPost] 
ActionResult SubmitUser(){ 

TempData["Msg"] ="Submitted Successfully"]; 

    return view(); 
} 

Der Wert wird senden Methode zu bekommen ..

Verwandte Themen