在jquery回发上,如果模型状态无效,我想显示使用jquery非侵入式验证的验证错误消息。我创建了一个示例应用程序。应用程序中的视图模型如下
public class CityModel
{
public int Id { get; set; }
[Display(Name = "City")]
[Required(ErrorMessage = "City is required")]
public string City { get; set; }
}
控制器具有以下动作方法
public ActionResult City()
{
var cities = GetCities();
return View(cities);
}
[HttpPost]
public ActionResult SaveCity(CityModel cityModel)
{
if (ModelState.IsValid)
{
//Save City
return null;
}
else
{
return View();
}
}
public List<CityModel> GetCities()
{
var citiesList = new List<CityModel>
{
new CityModel() {Id = 1, City = "London"},
new CityModel() {Id = 2, City = "New York"}
};
return citiesList;
}
视图具有以下标记
@model List<CityModel>
<h2>Cities</h2>
@Html.ValidationSummary(true)
@using (@Html.BeginForm(null, null, FormMethod.Post, new { id = "frmSite", name = "frmSite" }))
{
@Html.EditorForModel()
<input type="submit" name="Sumbit" onclick=" SaveCity(); return false; " />
}
<script>
function SaveCity() {
$.ajax({
type: "POST",
url: "/Home/SaveCity",
contentType: "application/html; charset=utf-8",
data: {
Id: $('.cityId').val(),
City: $('.cityName').val()
},
success: function (data) {
}
});
}
</script>
和编辑器模板看起来像
@model CityModel
<table class="table">
<tr>
<td>
@Html.TextBoxFor(x => x.Id, new {@class = "cityId"})
</td>
</tr>
<tr>
<td>
@Html.TextBoxFor(x => x.City, null, new {@class = "cityName"})
@Html.ValidationMessageFor(x => x.City)
</td>
</tr>
</table>
我已经检查了<script src="/Scripts/jquery-1.10.2.js"></script> <script src="/Scripts/jquery.validate.js"></script> <script src="/Scripts/jquery.validate.unobtrusive.js"></script>
页面中包含的内容,并且<add key="UnobtrusiveJavaScriptEnabled" value="true" />
存在于Web配置文件中
您正在通过ajax调用信息,因此需要使用以下命令手动调用$form.validate();
并测试结果$form.valid()
:
function SaveCity() {
$.validator.unobtrusive.parse($form);
$form.validate();
if ($form.valid()) {
$.ajax({
type: "POST",
url: "/Home/SaveCity",
contentType:"application/json; charset=utf-8",
data: {
Id: $('.cityId').val(),
City: $('.cityName').val()
},
success: function (data) {
}
});
}
}
如果纯粹是客户端,则错误将包含在jquery验证对象中,$form.validate().errorList
但是您将必须执行一些手动处理,类似于我在下面提到的内容。
如果您希望返回服务器端模型状态,则可以在控制器中将模型状态错误添加为键值对,并将其作为json返回。
您可以使用以下方法显示消息。
这将找到所有带有模型状态错误键的验证消息,并将红色错误消息添加到其中。请注意,您可能需要对此进行调整,以针对某个键显示许多错误消息。
public doValidation(e)
{
if (e.data != null) {
$.each(e.data, function (key, value) {
$errorSpan = $("span[data-valmsg-for='" + key + "']");
$errorSpan.html("<span style='color:red'>" + value + "</span>");
$errorSpan.show();
});
}
}
更新
这是上面的改编版,因此您可以从jQuery非干扰性错误中手动对其进行解析:
$.each($form.validate().errorList, function (key, value) {
$errorSpan = $("span[data-valmsg-for='" + value.element.id + "']");
$errorSpan.html("<span style='color:red'>" + value.message + "</span>");
$errorSpan.show();
});
只需在else语句中弹出它,就可以了。:)
我的springboot版本是2.3.7。我知道spring boot starter验证不是spring boot starter web的可传递依赖项。但即使单独添加了它,我的注释也不起作用。 //下面的依赖我已经添加build.gradle编译'org.springframework.boot: spring-boot-starter-validation' //我希望在请求时出错的示例类
问题内容: 我使用bassistance.de的jQuery验证程序插件(1.11)并通过php提交。现在,我在javacript代码的末尾的提交处理程序中添加了一个ajax调用,但是该调用不起作用,firebug控制台也不存在。 案例1 如果我在网站的开头放置了ajax调用,它可以工作,但是不再可以看到验证器插件。 案例2 如果我将调用放入提交处理程序中,则该调用不存在,并且表单由php提交。
当我使用null email向/注册用户发送一个POST请求时,我希望它会说“Hey,you have null in email field”,但由于语句,它会在保存步骤中抛出NPE。当我用错误的电子邮件发送json时,如下所示: 它完美地通过了这个约束注释: 我试过的。我尝试在@validemail、@get:validemail、@field:validemail(kotlin data c
我正在尝试发送一个ajax调用到带有屏蔽身份验证的elasticsearch 但我得到: 邮政http://localhost:9200/test2/test/_search401(未经授权) 我也试过: 但是我得到了同样的401错误。 接下来我尝试: 但现在我得到了 无法加载XMLHttpRequesthttp://localhost:9200/test2/test/_search.飞行前响应中
问题内容: 尝试访问$ container的’.box’类时,在ajax调用内部使用(this)不起作用。 如果不清楚我要做什么,我会尝试更改动态元素的css。但是例如 根本没有调整css。如果我将其移到ajax,success部分之外,它可以工作,但是我无法获得“描述”。 问题答案: 你近了 在您使用它的上下文中,“ this”是指ajax请求,而不是发出事件的事物。要解决此问题,请在发出aja
问题内容: 问题: 我正在使用OpenSAML构建对发布到我们服务器上的SAML 2.0响应进行身份验证的方法。我已经完成了大部分工作,并能够访问断言的各个方面。唯一的问题是,当我尝试使用下面的公钥来验证签名时,它指出“ 签名未针对凭证的密钥进行验证 ”。 有任何想法吗? 公钥: 签名: 实现方式: 问题答案: 好吧,事实证明上面的代码 是 正确的。样本SAML响应不正确。我想从这一切中学到的教训