我有这个自定义属性:
public class CountAttribute : ValidationAttribute
{
public string Number1 { get; set; }
public string Number2 { get; set; }
public CountAttribute()
{
}
public CountAttribute(string ErrorMessage, string Number1, string Number2)
{
this.Number1 = Number1;
this.Number2 = Number2;
this.ErrorMessage = ErrorMessage;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var propertyNumber1 = validationContext.ObjectType.GetProperty(Number1);
int number1 = (int)propertyNumber1.GetValue(validationContext.ObjectInstance);
var propertyNumber2 = validationContext.ObjectType.GetProperty(Number2);
int number2 = (int)propertyNumber2.GetValue(validationContext.ObjectInstance);
if (number1 + number2 != (int)value)
{
return new ValidationResult(ErrorMessage);
}
return ValidationResult.Success;
}
}
在布局上我有模态窗口呈现的动作,这样(无限循环会崩溃):
<div id="loginBox" class="modal-z">
@{ Html.RenderAction("Login", "Account"); }
</div>
当自定义属性被注释或模型有效时,表单帖子可以正常工作。
当我发布有错误的表单时,它会正确地重新显示模型,但是当我再次发布它(有效或无效)时,它会被循环堆叠。在RenderAction(登录)上写入此错误:
堆栈不足以安全地继续执行程序。这个可以 因为在调用堆栈或函数上有太多函数而发生 堆栈使用了太多的堆栈空间。
如何解决这个问题?
修改
[AllowAnonymous]
public PartialViewResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return PartialView();
}
[HttpPost]
[AllowAnonymous]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return PartialView(model);
}
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
// some redirect logic
default:
ModelState.AddModelError("", "Invalid login.");
return PartialView(model);
}
}