C# MVC验证不起作用

C# MVC验证不起作用,c#,asp.net-mvc,validation,C#,Asp.net Mvc,Validation,我有一个视图,它有一个文本框来输入用户名,然后有两个复选框。它将用于将所述用户名添加到复选框标记的角色中。文本框不应允许输入空/空字符串,如果用户名已存在,则向此人发出警告 看法 控制器验证方法 [HttpPost] public JsonResult ExistUser(String UserName) { bool exist = db.UserAdmins.Any(u => u.UserName == UserName); return Json(!exist);

我有一个视图,它有一个文本框来输入用户名,然后有两个复选框。它将用于将所述用户名添加到复选框标记的角色中。文本框不应允许输入空/空字符串,如果用户名已存在,则向此人发出警告

看法

控制器验证方法

[HttpPost]
public JsonResult ExistUser(String UserName)
{
    bool exist = db.UserAdmins.Any(u => u.UserName == UserName);

    return Json(!exist);
}
控制岗位法

[Authorize(Roles = "Director")]
[HttpPost]
public ActionResult AddNewUser(UserAdmin user)
{
    if (ModelState.IsValid)
    {
        db.UserAdmins.AddObject(user);
        db.SaveChanges();
        return RedirectToAction("AllUsers");
    }
    ViewBag.Roles = new SelectList(db.UserRoles, "UserRoleID", "UserRole1", user.UserRole);
    return View(user);
}
目前,它允许在提交时传入空字符串,而不是显示错误。我的自定义验证甚至没有启动,我的调试也受到了影响

我已经在应用程序的其他部分使用了它,这些部分仍然有效

另外,如果你们需要更多的代码,请告诉我,我会把它准备好的

编辑::与原始帖子完全不同的代码

Volkan Paksoy指出了我缺少的ModelState.IsValid和view return

对于客户端验证,我错过了

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

首先,正如@Chris Bohatka所建议的,您必须使用您的模型作为参数(本例中为用户类)

然后必须检查ModelState的状态,如下所示:

if (!ModelState.IsValid)
{
    // There is an error on the page, load the same view to display the errors
}

// Model is fine, carry on with the other stuff...

我在ModelState errors集合中调试并看到了“必须输入用户名”,因此您必须返回到同一视图,以便用户可以看到错误并修复它。

可能您没有启用客户端验证,在这种情况下,即使字段不正确,它也会执行post。此外,在post controller方法中,您没有检查ModelState的有效性,这可能是无效的,这意味着存在一个验证问题,而您并没有考虑到这个问题。将此添加到控制器方法:

if (ModelState.IsValid) { do work };
并确保web.config中有以下行以启用客户端(JavaScript)验证,在这种情况下,在字段值有效之前,post不会发生:

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


使用[Required]属性修改要在模型实例中执行的POST操作,而不仅仅是字符串值。@已经在其中的HadiHassan没有这样做matter@ChrisBohatka如果您只是想传入User,然后在代码中将UserName切换为User.UserName,如果客户端验证不起作用,这是因为您没有按照正确的顺序包含相关脚本(您是否在显示的两个脚本之前包含了
jquery{version}.js
),或者没有启用它。您还没有显示POST方法(仅用于远程验证的方法),因此无法判断是否存在错误。谢谢。就差一部分了。我不知道它只是重新加载了带有错误的页面。当框为空时,它会显示错误。关于用户是否已在系统中的客户端验证没有受到影响。
if (ModelState.IsValid) { do work };
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />