在Umbraco中,我可以將MVC偏分量與SurfaceController
掛鉤,在回發後重新呈現時丟失模型狀態,或者過早驗證模型,並在@Html.ValidationMessageFor
助手上顯示驗證錯誤最初的頁面渲染。我真正想要的是符合vanilla MVC partials和models的行爲。Umbraco SurfaceController模型狀態/模型驗證問題
我創建MVC諧音爲一把umbraco使用由SurfaceController
支持來處理渲染和後回。
我則在「宏」包裝這些諧音,使他們能投進頁面內容與其他內容,而不是創造所需的每個特殊頁特殊文件類型(會有很多)。
部分:
@using SomeProject.Web.Controllers
@model SomeProject.Web.Models.Identity.UserModel
@using (Html.BeginUmbracoForm<IdentitySurfaceController>("RegisterDetailsSubmit", null, new { @class = "form-horizontal" }))
{
@Html.AntiForgeryToken()
@Html.EditorFor(model => Model)
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-primary" value="Register" />
</div>
</div>
}
宏:
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@Html.Action("RegisterDetails", "IdentitySurface")
SurfaceController:
using SomeProject.Web.Models.Identity;
using System;
using System.Web.Mvc;
namespace SomeProject.Web.Controllers
{
public class IdentitySurfaceController : Umbraco.Web.Mvc.SurfaceController
{
[ChildActionOnly]
public ActionResult RegisterDetails(UserModel model)
{
if (model == null || model.Id == Guid.Empty) model = new UserModel(GetUser());
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RegisterDetailsSubmit(UserModel model)
{
if (ModelState.IsValid)
{
...
}
return CurrentUmbracoPage();
}
}
}
當我使用:
[ChildActionOnly]
public ActionResult RegisterDetails()
我在回貼後呈現模型狀態時很鬆散。用戶編輯丟失。
當我使用:
[ChildActionOnly]
public ActionResult RegisterDetails(UserModel model)
驗證早,所以我看到驗證錯誤隨處可見,就好像一個回已經發生髮生。在代碼中設置斷點時,我可以看到SurfaceController代碼在命中局部視圖之前先被調用。在部分視圖中填充模型,但由於某些原因,所有驗證消息都會顯示爲模型爲空。如果我回發帖子,模型狀態將被保留,並且所有內容都按預期顯示 - 錯誤模型屬性的驗證消息,沒有好的模型屬性的消息。
我看到所有@Html.ValidationMessageFor
項目的驗證消息,以及所有@Html.EditorFor
項目中的有效模型屬性。
任何想法,我可能是做錯了?