2016-04-07 49 views
0

在窗體回發期間驗證Umbraco SurfaceController中的模型時,我無法使用ModelState.AddModelError添加驗證錯誤消息以向用戶提供反饋。任何想法爲什麼?Umbraco無法在SurfaceController中的HttpPost期間添加模型錯誤

我可以使用ModelState.AddModelError中的[ChildActionOnly]渲染方法沒有問題。

[ChildActionOnly] 
public ActionResult VerifyEmail(VerifyEmailModel model) 
{ 
    // This DOES work 
    ModelState.AddModelError("SomeProperty", "Some error message to display."); 

    return View(model); 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult VerifyEmailSubmit(VerifyEmailModel model) 
{ 
    // This DOESN'T work 
    ModelState.AddModelError("SomeProperty", "Some error message to display."); 

    return CurrentUmbracoPage(); 
} 

任何想法如何解決這個問題?

我想我可以嘗試編寫自定義的System.ComponentModel.DataAnnotations.ValidationAttribute但我需要做的驗證需要查找基於其他模型屬性的數據,因此開始變得有點複雜。

+0

我已經交叉發佈到Umbraco論壇,以防Umbraco開發人員更活躍,而不是堆棧溢出 - https://our.umbraco.org/forum/templates-partial-views-and-macros/76443-不能-addmodelerror-期間,httppost功能於surfacecontroller – Gavin

回答

0

我使出了編碼的通用System.ComponentModel.DataAnnotations.ValidationAttribute來解決這個問題:

public class VerificationCodeAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     string code = (string)value; 
     Guid userId = Guid.Empty; 

     PropertyInfo userIdProperty = validationContext.ObjectType.GetProperty("UserId"); 
     if (userIdProperty != null) 
      userId = (Guid)userIdProperty.GetValue(validationContext.ObjectInstance); 

     // See if we're confirming email via link 
     if (userId == Guid.Empty) 
      userId = MyProject.Identity.Client.GetUser().Id; 

     if (!string.IsNullOrWhiteSpace(code) && !MyProject.Identity.Client.VerifyUserEmail(userId, code)) 
      return new ValidationResult("Invalid email verification code."); 

     return null; // Default for empty string 
    } 
} 

然而,這種解決辦法可能不會在將來有需要speculation that this scenario could be a bug in Umbraco 7.4.2

相關問題