2016-08-08 6 views
-1

Ich habe eine Ansicht enthält Login und Anmeldeformular.Verwenden von Tuple zum Übergeben mehrerer Modelle

LoginAndRegister.cshtml Datei:

@model Tuple<Models.LoginViewModel, Models.RegisterViewModel> 

    @using (Html.BeginForm("Login", "Account", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(false) 
     // Form Login here 

    } 
    @using (Html.BeginForm("Register", "Account", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(false) 

     // Form Register here 

    } 

Account Datei:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Register([Bind(Prefix = "Item2")] RegisterViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // enter code here  
     } 

     // If we got this far, something failed, redisplay form 
     var tupleModel = new Tuple<LoginViewModel, RegisterViewModel>(null, model); 
     return View("LoginAndRegister", tupleModel); 
     } 
    } 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login([Bind(Prefix = "Item1")] LoginViewModel model, string returnUrl) 
    { 
     var tupleModel = new Tuple<LoginViewModel, RegisterViewModel>(model, null); 

     if (!ModelState.IsValid) 
     { 
       return View("LoginAndRegister", tupleModel); 
     } 

    } 

I 2 Frage haben, ob ihr nicht könnten Sie mir helfen, etwas dagegen?

  1. Als ich Modell übergeben (nur ein Element von Tupel) von der Steuerung zum Ansehen, ich habe es ändern <> Typ TUPLE und übergeben 1-Wert null ist. Ist dieser Weg richtig? Es funktioniert für mich, aber ich fürchte, dass mein Weg nicht stimmt.

  2. Und dann, wenn das Modell ungültig ist (Beispiel: Werte Eingabe in Login-Formular ist ungültig), werden Fehlermeldungen in @ Html.ValidationSummary (false) binden. Aber es ist an 2 Stellen gezeigt (Anmeldung und Login-Formular). Wie behebe ich dieses Problem? https://gyazo.com/e9146059a6a098ee787565222d8dc744

Vielen Dank für Art

+3

Scheint so, als ob Sie versuchen, etwas durch den Modellbinder zu schüren. Warum nicht einfach ein Modell erstellen, das alle benötigten Informationen enthält, und dieses weitergeben? –

+1

Ja entweder ein großes ViewModel erstellen, das alle Eigenschaften enthält - oder ein neues ViewModel erstellen, das ein LoginViewModel und ein RegisterViewModel enthält – niico

Antwort

2

Anmeldung zu helfen und registrieren, sind zwei verschiedene Modelle. Sie können umgehen mit Tuples in asp.net mit den HTML-Helfern. Die Verwendung eines Tupels macht die Sache nur unordentlich.

Was Sie wahrscheinlich wollen, ist so etwas wie dieses:

Register.cshtml Datei:

@model Models.RegisterViewModel 

@using (Html.BeginForm("Register", "Account", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(false) 

    // Form Register here 

} 
<div>Or if you already have an account then login:</div> 
@Html.RenderAction("Login") 

Controller:

public ActionResult Login() 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     return PartialView(); 
    } 
} 

Dies wird die Login-Ansicht in der Registeransicht machen, Sie kann das auch anders herum machen. Obwohl ich persönlich einen Link zu dem Benutzer anbieten würde, um ihn auf die Login-Seite umzuleiten, anstatt die Rendering-Funktion zu verwenden.

+0

Ich werde Ihren Vorschlag versuchen. Danke für die freundliche Hilfe –

Verwandte Themen