IValidatableObject不显示错误信息

本文关键字:信息 错误 显示 IValidatableObject | 更新日期: 2023-09-27 18:11:58

我在这里遵循ScottGus的博客-我的基本要求是我在屏幕上有两个文本字段-我想验证它们是否都是空白的,并且Sumite按钮被按下,我想显示使用其中一个或另一个是必需的

我有一个UserModel如下:

public class UserViewModel : IValidatableObject
{
    [Display(Name = "Name:")]
    public string UserName { get; set; }
    [Display(Name = "User Account Number:")]
    public string UserAccountNumber { get; set; }
    public bool UserHasName()
    {
        return !string.IsNullOrEmpty(UserName);
    }
    public bool UserHasAccountNumber()
    {
        return !string.IsNullOrEmpty(UserAccountNumber);
    }
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (!UserHasName() && !UserHasAccountNumber())
        {
            yield return new ValidationResult("Please enter an Account Number or Name ", new [] {"UserName"});
        }
    }
}

我的观点是:

  @Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @placeholder = "UserName" })
                    @Html.ValidationMessageFor(m => m.UserName)

在Webconfig中我有以下内容:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

然而,当我点击提交按钮与两个字段空白没有错误信息显示在屏幕上?

在Bundle配置中,我也使用jQuery.validate.unobtrusive:

 bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js",
                        "~/Scripts/jquery.validate.js",
                        "~/Scripts/jquery.validate.unobtrusive.js"));

虽然后来我包括js为引导和剑道ui -可能会造成一些冲突?

更新两个

控制器代码:

public ActionResult UserDetails()
    {
        if (ModelState.IsValid)
        {
            // IsValid is true so code goes in here when text fields are blank??
            //redirect to another view
        }
        return View();
    }

我有一个jsonvaliddationfilterattribute类-代码如下-虽然我说,由于某种原因断点验证或这个onaction执行没有被击中?

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (actionContext.ModelState.IsValid) return;
        var errorMessages = actionContext.ModelState.Values
            .SelectMany(modelState => modelState.Errors);
        actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, Json.Encode(errorMessages));
    }

IValidatableObject不显示错误信息

我认为你应该在你的动作方法中插入参数,像这样:

public ActionResult UserDetails(UserViewModel model)

否则,MVC不理解,你想在这个模型上调用Validate

你可能需要一些额外的javascript:

包含jquery.unobtrusive-ajax.js文件。

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>

你可以在NuGet Packages: Microsoft.jQuery.Unobtrusive.Ajax中找到它。