我正在关注ScottGus博客here - 我的基本要求是我在屏幕上有两个文本字段 - 我想验证它们是否都是空白并按下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"));
虽然之后我为引导程序和kendo ui包含了js - 这是否会引起一些冲突?
更新了两个
控制器代码:
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));
}
答案 0 :(得分:1)
我认为你应该在你的action方法中插入参数,如下所示:
public ActionResult UserDetails(UserViewModel model)
否则,MVC并不理解,您想在此模型上调用Validate
。
答案 1 :(得分:0)
您可能需要一些额外的javascript:
包括jquery.unobtrusive-ajax.js文件。
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
您可以在NuGet包中找到它:Microsoft.jQuery.Unobtrusive.Ajax
。