gpt4 book ai didi

c# - MVC 5 IValidatableObject 不显示错误消息?

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:10 25 4
gpt4 key购买 nike

我正在关注 ScottGus 博客 here - 我的基本要求是我在屏幕上有两个文本字段 - 我想验证它们是否都是空白的并且按下了 Sumite 按钮我想显示以使用那个或另一个是必需的

我有一个用户模型如下:

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 用于 bootstrap 和 kendo ui - 这会导致一些冲突吗?

更新二

Controller 代码:

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();
}

我确实有一个 JsonValididationFilterAttribute 类 - 代码如下 - 虽然正如我所说的出于某种原因断点在 Validate 上或这个 OnActionExecuting 没有被击中?

    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));
}

最佳答案

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

public ActionResult UserDetails(UserViewModel model)

否则,MVC 无法理解您想在此模型上调用Validate

关于c# - MVC 5 IValidatableObject 不显示错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24608871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com