Mehrere models in einer view
Möchte ich haben 2 Modelle im Blick. Die Seite enthält sowohl LoginViewModel
und RegisterViewModel
.
z.B.
public class LoginViewModel
{
public string Email { get; set; }
public string Password { get; set; }
}
public class RegisterViewModel
{
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
Brauche ich, um ein anderes ViewModel hält diese 2 ViewModels?
public BigViewModel
{
public LoginViewModel LoginViewModel{get; set;}
public RegisterViewModel RegisterViewModel {get; set;}
}
Brauche ich die Validierungs-Attribute auf den Weg gebracht hat, um die Sicht, das ist, warum ich brauche den ViewModels.
Gibt es nicht einen anderen Weg, wie (ohne die BigViewModel
):
@model ViewModel.RegisterViewModel
@using (Html.BeginForm("Login", "Auth", FormMethod.Post))
{
@Html.TextBoxFor(model => model.Name)
@Html.TextBoxFor(model => model.Email)
@Html.PasswordFor(model => model.Password)
}
@model ViewModel.LoginViewModel
@using (Html.BeginForm("Login", "Auth", FormMethod.Post))
{
@Html.TextBoxFor(model => model.Email)
@Html.PasswordFor(model => model.Password)
}
sehen: codeproject.com/Articles/687061/...
serpooshan, vielen Dank für den link mit den verschiedenen Optionen, nach 4 Jahren, Sie einen Kommentar gepostet und es hat mir geholfen, ich habe gerade verwendet
Nur ein FYI: die post Autor bekommt immer eine Benachrichtigung, aber wenn Sie möchten, Benachrichtigen Sie jemand anderes, die Sie benötigen, um
serpooshan, vielen Dank für den link mit den verschiedenen Optionen, nach 4 Jahren, Sie einen Kommentar gepostet und es hat mir geholfen, ich habe gerade verwendet
ViewBag
mit für jedes in der Ansicht, funktioniert SuperNur ein FYI: die post Autor bekommt immer eine Benachrichtigung, aber wenn Sie möchten, Benachrichtigen Sie jemand anderes, die Sie benötigen, um
@
vor Ihren Namen, wie ich hier getan habe.
InformationsquelleAutor Shawn Mclean | 2011-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es viele Möglichkeiten...
mit Ihrem BigViewModel
Sie:
können Sie erstellen, 2 zusätzliche Ansichten
Login.cshtml
registrieren.cshtml gleiche
nach der Erstellung haben, dass Sie in der Hauptansicht und übergeben Sie die viewmodel - /viewdata
also es könnte so sein:
oder
ajax Teile Ihrer web-site Unabhängiger
iframes
, aber wahrscheinlich ist dies nicht der FallNein, das sollte in Ordnung sein - klicken Sie auf das element selbst mit so etwas wie firebug (für firefox) und du wirst sehen, sowas wie id="LoginViewModel_Email" name = "LoginViewModel.E-Mail", so in der Tat Sie sind einzigartig! Ein view-Modell sollte das sein, was Sie brauchen, nur nach jeder Seite auf eine andere URL und Sie sollten in Ordnung sein
coder eigentlich wäre es 2 Formen, eine für jede viewmodel, aber trotzdem hätten Sie 2 oder 3 (oder mehr) mit demselben Namen, den Sie möchte einfach nur ein array mit diesem Namen auf der server-Seite (wenn man es in die params der post-action-Methode)
Norris ich bin mit asp.net mvc 4 und implementiert Ihre partialviewresult Technik aber
@Html.RenderAction
meldet einen Fehler, dass - Ausdruck muss einen Wert zurückgebenKönnen Sie erklären, wie das funktioniert? Ich verstehe, das ist eine Lösung für das problem, aber ich kann nicht einen Sinn für Sie. Ich habe eine ähnliche(etwas anderes) Beispiel für das problem, und ich kann nicht herausfinden, wie zu umgehen.
InformationsquelleAutor Omu
Ich würde empfehlen, mit
Html.RenderAction
und PartialViewResults um dies zu erreichen; es wird Ihnen erlauben, die gleichen Daten angezeigt, aber jede Teilansicht hätte noch einen single-view-Modell und beseitigt die Notwendigkeit für eineBigViewModel
So Ihre Ansicht enthalten, so etwas wie die folgenden:
Wo
Login
&Register
sind beide Aktionen im controller definiert wie folgt:Den
Login
&Register
würde, dann werden Benutzer-Steuerelemente, die Ihren Wohnsitz entweder im aktuellen Ordner Anzeigen, oder im Freigegebenen Ordner, und möchte so etwas wie dies:/Views/Shared/Login.cshtml: (oder /Views/MyView/Login.cshtml)
/Views/Shared/Registrieren.cshtml: (oder /Views/MyView/Registrieren.cshtml)
Und dort haben Sie eine einzelne controller-action, view und view-Datei für jede Aktion mit jeweils völlig unterschiedliche und nicht darauf angewiesen, auf eine andere für alles andere.
Ja du hast Recht: es führt zu einem zusätzlichen vollen MVC-Zyklus für jeden
RenderAction
. Ich vergesse immer seinen Teil der futures-pack, da mein Projekt immer auch, dass die dll von default. Es ist wirklich bis zu Präferenz und den Anforderungen der Applikation, ob die zusätzliche mvc-Zyklen sind es Wert, die Trennung gibt es auf der design-Seite. Eine Menge Zeit, die Sie Zwischenspeichern können dieRenderAction
Ergebnisse, so dass der einzige Treffer, die Sie nehmen ist die geringfügige zusätzliche Verarbeitung, die über die controller factory.Ich habe implementiert die oben.. was bin ich? Bitte um Hilfe: stackoverflow.com/questions/9677818/...
Heilige Scheiße! Dies funktionierte perfekt für mich direkt aus dem Tor. Ich Baue eine interne Website mit nur ein paar Usern... damit die Effizienz nicht um ein echtes Anliegen von mir. DANKE!!!
Hatte so verwenden Sie geschweifte Klammern um PartialView arbeiten.
InformationsquelleAutor TheRightChoyce
Andere Weise zu verwenden ist:
Habe ich erläutert, wie diese Methode sowohl in der view, und controller für ein anderes Beispiel: Zwei Modelle in einer Ansicht in ASP MVC 3
In Ihrem Fall könnten Sie implementieren es mit den folgenden code:
In der Ansicht:
Hinweis, dass ich manuell geändert wird, werden die Name-Attribute für jede Eigenschaft, die beim erstellen des Formulars. Dies muss geschehen, sonst würde das nicht richtig zugeordnet zu der Methode parameter vom Typ Modell, wenn die Werte gesendet werden, um die zugeordnete Methode für die Verarbeitung. Ich würde vorschlagen, mit separaten Methoden für die Bearbeitung dieser Formen getrennt, für dieses Beispiel habe ich Login1 und Login2 Methoden. Login1 Methode benötigt einen parameter vom Typ RegisterViewModel und Login2 benötigt einen parameter vom Typ LoginViewModel.
wenn ein actionlink ist notwendig, die Sie verwenden können:
in der controller-Methode für die Ansicht, eine variable vom Typ Tuple erstellt werden muss und dann an das view.
Beispiel:
oder Sie können füllen Sie die zwei Instanzen von LoginViewModel und RegisterViewModel mit den Werten und dann übergeben es an die view.
Ich hab das versucht, aber wenn ich
EditorFor
oderHiddenFor
(was im Idealfall, was ich will, zu verwenden) die Modell-Eigenschaften werden nicht gesetzt, wenn dieLogin1
/Login2
controller-Methoden aufgerufen werden. Vermutlich@Name=
mapping ignoriert. TutHiddenFor
erfordern einige andere trick für diese situation?Dies wird überhaupt nicht funktionieren - Sie können binden Sie das Modell, wenn das Formular abgeschickt wird
Danke Hamid, für einen Neuling in MVC, das war die simpelste Antwort für mich. Danke.
Wie hast du bind-Modell, die beim Absenden des Formulars?
InformationsquelleAutor Hamid
Verwenden Sie einen view-Modell enthält mehrere Modelle ansehen:
Ihrer Ansicht:
InformationsquelleAutor Yini
Antwort:Nein
Ja, die Sie verwenden können, Tupel (bringt Magie in Aussicht, die mehrere Modell).
Code:
InformationsquelleAutor VCody
Fügen Sie diese ModelCollection.cs Ihren Modellen
Controller:
Ansicht:
InformationsquelleAutor Morten Frederiksen