Ich versuche, Login-und Registrierungsformular in derselben Ansicht zu setzen. Ich habe alles in anderen Fragen vorgeschlagen, aber mein Problem ist immer noch nicht behoben.MVC Nested View-Modell mit Validierung
Hier ist meine Mutter Ansicht authentication.cshtml:
@model Eriene.Mvc.Models.AccountVM
<div class="row">
<div class="col-md-6">
@Html.Partial("_Login", Model.Login ?? new Eriene.Mvc.Models.LoginVM())
</div>
<div class="col-md-6">
@Html.Partial("_Register", Model.Register ?? new Eriene.Mvc.Models.RegisterVM())
</div>
</div>
In meinem partials ich Formen wie diese verwenden:
[HttpPost]
[AllowAnonymous]
public ActionResult Register(RegisterVM registerVM)
{
if (ModelState.IsValid)
{
User user = new Data.User();
user.Email = registerVM.Email;
user.ActivationCode = Guid.NewGuid().ToString();
user.FirstName = registerVM.FirstName;
user.LastName = registerVM.LastName;
user.Password = PasswordHelper.CreateHash(registerVM.Password);
return RedirectToAction("Index", "Home");
}
return View("Authentication", new AccountVM() { Register = registerVM });
}
:
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @id = "login-form", @role = "form", @class = "login-form cf-style-1" }))
Eine der Aktionen wie dieser ist
Und hier sind die Modelle, die ich verwende:
public class AccountVM
{
public LoginVM Login { get; set; }
public RegisterVM Register { get; set; }
}
public class RegisterVM
{
[Required]
public string Email { get; set; }
[Required]
public string FirstName { get; internal set; }
[Required]
public string LastName { get; internal set; }
[Required]
public string Password { get; internal set; }
[Compare]
public string PasswordRetype { get; internal set; }
}
public class LoginVM
{
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
public bool RememberMe { get; set; }
}
In der E-Mail-Eigenschaft der Aktion registervm hat einen Wert, aber andere sind null. ModelState.IsValid ist falsch. Was mache ich falsch?
Gott erzeugt ich tha Durch das Refactoring ist mir nicht bewusst, dass sie intern sind. Entschuldigung für diesen Unsinn. Ein Dankeschön! –