YoAsp.net MVC Razor mehr als eine Form auf einer Seite
ich eine Registrierungsseite auf meiner Seite habe - ganz oben auf der Seite ist ein Anmeldeformular für bestehende Benutzer. Im Hauptbereich befindet sich das Anmeldeformular.
Die Login ist eine Teilansicht mit @model ViewModels.LoginViewModel
Die Registrierung ist, ist auch ein teilweise mit @model ViewModels.RegViewModel
Die Hauptseite, die diese partials beherbergt ist eine Ansicht mit @model ViewModels.RegPageViewModel
Das Ansichtsmodell wie folgt aussieht:
Wenn ich den Registrierungsteil der Seite (es ist Aktion ist register/capture - die empfangende Aktion erwartet ein RegisterVm) zu con conmittieren troller beklagt sich über das falsche viewmodel
Was ist der Deal mit Subviews und deren Viewmodel? Gibt es einen Standardansatz, um damit umzugehen?
Sollte ich eine URL für diese Seite haben, die herausfindet, ob es sich um eine Login-Anfrage oder eine Registrierungsanfrage handelt und die Post dann entsprechend behandelt? Das scheint chaotisch mir aber ...
http://monobin.com/__d33cf45a4 - RegisterVm.cs (LoginVm.cs ist so ziemlich das gleiche wie diese)
http://monobin.com/__m69132f76 - RegPageVm.cs
Register.cshtml:
@model xxxx.ViewModels.RegPageVm
@{
View.Title = "Register";
Layout = "~/Views/Shared/_BareBones.cshtml";
}
<link rel="stylesheet" href="@Url.Content("~/Public/Css/signup.css")" type="text/css" />
<div id="sign-up-container">
<div id="sign-up-box">
<div id="sign-up-box-left">
<img src="@Url.Content("~/Public/Images/Signup_176x81.png")" />
</div>
<div id="sign-up-box-right">
@Html.Partial("_Register")
</div>
</div>
</div>
<div class="clear">
</div>
_Register.cshtml:
@model xxxx.ViewModels.RegisterVm
@using (Html.BeginForm("Capture", "Register", FormMethod.Post))
{
<table class="sign-up-box-inner">
<tr>
<td class="label-area">
@Html.LabelFor(x => x.Email)
</td>
<td class="field-area">
@Html.TextBoxFor(x => x.Email, new { @class = "login-input", title = "Enter Name" })
</td>
</tr>
<tr>
<td class="label-area">
@Html.LabelFor(x => x.Password)
</td>
<td class="field-area">
@Html.PasswordFor(x => x.Password, new { @class = "login-input", title = "Enter Name" })
</td>
</tr>
<tr>
<td class="label-area">
@Html.LabelFor(x => x.UserName)
</td>
<td class="field-area">
@Html.TextBoxFor(x => x.UserName, new { @class = "login-input", title = "Enter Name" })
</td>
</tr>
<tr>
<td colspan="2">
<input type="image" src="../../Public/Images/Submit_150x47.png" class="submit-button" />
</td>
</tr>
</table>
@Html.AntiForgeryToken()
}
Und schließlich RegisterController.cs:
public class RegisterController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult Capture(RegisterVm registerVm)
{
if (!ModelState.IsValid)
{
return View("index", new RegPageVm()
{
LoginVm = new LoginVm(),
RegisterVm = registerVm
});
}
return RedirectToAction("index", "Event");
}
}
w: //
Können wir einen Teil des Codes aus der Ansicht sehen? –
sollte es nicht @ Html.Partial sein ("_ Register", Model.RegisterVm)? – neebz