【发布时间】:2015-07-22 19:46:03
【问题描述】:
我有一个视图,它有一个用于输入用户名的文本框,然后是两个复选框。它将用于将所述用户名添加到复选框标记的角色中。文本框不应允许输入空/空字符串,如果用户名已存在,请警告此人。
查看
@model QIEducationWebApp.Models.UserAdmin
<h1 class="page-header">Add New User</h1>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<table class="table">
<tr>
<th class="table-row">
User Name:
</th>
<td class="table-row">
@Html.TextBoxFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</td>
</tr>
<tr>
<th class="table-row">
Role:
</th>
<td class="table-row">
@Html.DropDownListFor(model => model.UserRole,
@ViewBag.Roles as SelectList, " -- Select Role -- ", new { @class="form-control" })
@Html.ValidationMessageFor(model => model.UserRole)
</td>
</tr>
<tr><td class="table-row-blank"></td></tr>
<tr>
<td class="table-row-button">
<input class="button" type="submit" value="Create" />
<input type="button" class="button" value="Cancel"
onclick="location.href='@Url.Action("AllUsers")'" />
</td>
</tr>
</table>
}
型号
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[Required(ErrorMessage = "Required")]
[Remote("ExistUser", "Admin", HttpMethod = "POST",
ErrorMessage = "User is assinged, Edit instead")]
[DataMemberAttribute()]
public global::System.String UserName
{
get
{
return _UserName;
}
set
{
OnUserNameChanging(value);
ReportPropertyChanging("UserName");
_UserName = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("UserName");
OnUserNameChanged();
}
}
private global::System.String _UserName;
partial void OnUserNameChanging(global::System.String value);
partial void OnUserNameChanged();
控制器验证方法
[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 并查看返回。
对于客户端验证,我错过了我的
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
【问题讨论】:
-
使用[必需]属性
-
修改您的 POST Action 以获取模型的实例,而不仅仅是字符串值。
-
@HadiHassan 已经在里面了,没关系
-
@ChrisBohatka 如果您的意思是只传入用户用户,然后在代码中将用户名切换为用户名,那是行不通的
-
如果客户端验证不起作用,因为您没有按正确顺序包含相关脚本(您是否在显示的 2 个脚本之前包含了
jquery{version}.js?)或未启用.而且您还没有显示您的 POST 方法(仅用于远程验证的方法),因此无法判断您是否可能有错误。
标签: c# asp.net-mvc validation