ดู:
<p>Parent ViewData: @ViewData["Test"]</p>
@Html.Action("MemberSignup","MemberSignupSurface")
มุมมองบางส่วน:
<p>PartialView ViewData: @ViewData["Test"]</p>
@using (Html.BeginUmbracoForm<MemberSignupSurfaceController>
("MemberSignupSubmit", "MemberSignupSurfaceController",FormMethod.Post))
{
<!-- Some form controls -->
<input type="submit" value="Signup" />
}
ตัวควบคุม:
public class MemberSignupSurfaceController : SurfaceController
{
public ActionResult MemberSignup()
{
ViewData["Test"] = "From MemberSignup";
// Do database stuff and create model from that
return PartialView("MemberSignupView", model);
}
[HttpPost]
public ActionResult MemberSignupSubmit(MemberViewModel model)
{
ViewData["Test"] = "From MemberSignupSubmit";
if (ModelState.IsValid)
{
// Redirect to success using TempData
}
else
{
return CurrentUmbracoPage();
}
}
}
เมื่อโหลดเพจของฉัน MemberSignup
ถูกเรียกและเพจแสดง
ข้อมูลมุมมองหลัก:
ViewData บางส่วน: จาก MemberSignup
เมื่อฉันส่งแบบฟอร์มในมุมมองบางส่วนโดยมีอินพุตที่ไม่ถูกต้อง ดังนั้นมันจะไม่ตรวจสอบและเรียก CurrentUmbracoPage()
ในการดำเนินการ MemberSignupSubmit
ฉันได้รับสิ่งต่อไปนี้:
ข้อมูลมุมมองหลัก: จาก MemberSignupSubmit
ViewData บางส่วน: จาก MemberSignup
หากฉันใช้ @Html.Partial
เพื่อแสดงผลมุมมองบางส่วน ถุงมองทั้งสองจะแสดงค่าเดียวกันที่ตั้งไว้จากการดำเนินการส่ง
ฉันได้ลอง TempData
แต่มันก็ไม่ได้ผลเหมือนกัน ไม่มีทางที่จะส่งสิ่งใดกลับไปยังมุมมองบางส่วนได้จริงๆ หลังจากที่ฉันกลับจากการดำเนินการส่งเมื่อใช้ @Html.Action
เพื่อแสดงแบบฟอร์มมุมมองบางส่วน
ปัญหาโดยรวมที่ฉันพยายามแก้ไขคือการเติมดรอปดาวน์ในแบบฟอร์มของฉันด้วยค่าจากฐานข้อมูล การใช้ @Html.Partial
ไม่อนุญาตให้ฉันทำสิ่งนี้ แต่มี viewbag ที่ใช้งานได้