Yo
ฉันมีหน้าลงทะเบียนบนเว็บไซต์ของฉัน - ที่ด้านบนของหน้าคือแบบฟอร์มการเข้าสู่ระบบสำหรับผู้ใช้ที่มีอยู่ ในบริเวณหลักจะมีแบบฟอร์มลงทะเบียน
การเข้าสู่ระบบเป็นมุมมองบางส่วนด้วย @model ViewModels.LoginViewModel
การลงทะเบียนเป็นมุมมองบางส่วนด้วย @model ViewModels.RegViewModel
หน้าหลักซึ่งมีบางส่วนเหล่านี้คือมุมมองที่มี @model ViewModels.RegPageViewModel
วิวโมเดลนี้ดูเหมือนว่า:
public class RegViewModel
{
public RegisterVm RegisterVm { get; set; }
public LoginVm LoginVm { get; set; }
}
เมื่อฉันส่งส่วนการลงทะเบียนของเพจ (การกระทำคือการลงทะเบียน/การจับภาพ - การดำเนินการที่ได้รับคาดว่าจะมี RegisterVm) ไปยังตัวควบคุม มันบ่นว่าถูกส่งผ่านโมเดลมุมมองที่ไม่ถูกต้อง
การจัดการกับมุมมองย่อยและโมเดลมุมมองของพวกเขาคืออะไร มีแนวทางมาตรฐานในการจัดการกับสิ่งนี้หรือไม่?
ฉันควรมี URL ส่งหนึ่งรายการสำหรับหน้านี้ซึ่งระบุว่าเป็นคำขอเข้าสู่ระบบหรือคำขอลงทะเบียนแล้วจัดการโพสต์ตามนั้นหรือไม่ มันดูยุ่งสำหรับฉันแม้ว่า ...
http://monobin.com/__d33cf45a4 - RegisterVm.cs (LoginVm.cs ค่อนข้างจะเหมือนกับสิ่งนี้)
http://monobin.com/__m69132f76 - RegPageVm.cs
Register.cshtml:
@model xxxx.ViewModels.RegPageVm
@{
View.Title = "Register";
Layout = "~/Views/Shared/_BareBones.cshtml";
}
<link rel="stylesheet" href="/[email protected]("~/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()
}
และสุดท้าย 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://