asp.net-mvc – Kendo Grid Edit InLine Custom Validation messa
|
我有一个实体位置,我正在使用具有InLine编辑模式的Kendu UI网格.
目前,它可以显示必需的验证消息: 而且它还可以在LocationController Ajax InLine Create方法中调用CustomValidateModel方法,该方法检查Name是否已经存在于数据库中,然后添加一个ModelError.我通过javascript在.Events(events => events.Error(“onError”))中捕获此错误,然后通过javascript弹出窗口显示该消息. ModelState.AddModelError("DisplayName","Name already exists.");
这是问题的关键:我不想有这个JavaScript弹出消息.我想在这个字段下面也有这样的信息,就像这个“Field required!”一样!信息. 另外,弹出窗口之外的实际问题是,用户想要在网格中创建的记录在确认javascript弹出窗口之后就会消失. 码: 位置实体: public class LocationDto
{
public Guid? ID { get; set; }
[Required(AllowEmptyStrings = false,ErrorMessage = "Field required!")]
public string DisplayName { get; set; }
// other properties
}
LocationController动作方式: [AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateInline([DataSourceRequest] DataSourceRequest request,LocationDto model)
{
CustomValidateModel(model); // checks if the DisplayName is already existing in the DB
if (model != null && ModelState.IsValid)
{
// Create and Save the Model into database
}
return Json(ModelState.ToDataSourceResult());
}
javascript功能: function onError(e,status) {
if (e.errors) {
var message = "Error:n";
$.each(e.errors,function (key,value) {
if (value.errors) {
message += value.errors.join("n");
}
});
this.cancelChanges();
alert(message);
}
}
我希望有可能以同样的方式让这个工作.根据一致的可视化和可用性的提高将是很好的. 解决方法我们在网格中完成了这一点,就像在控制器一样,将我们的自定义错误添加到模型状态并将其传递给视图.然后在onError javascript事件中,我们自己构建了验证消息,并将其放在网格中.Javascript onError: function onError(e,status) {
if (e.errors) {
var message = "Error:n";
var grid = $('#gridID').data('kendoGrid');
var gridElement = grid.editable.element;
$.each(e.errors,value) {
if (value.errors) {
gridElement.find("[data-valmsg-for=" + key + "],[data-val-msg-for=" + key + "]")
.replaceWith(validationMessageTmpl({ field: key,message: value.errors[0] }));
gridElement.find("input[name=" + key + "]").focus()
}
});
}
}
然后创建一个validationMessageTmpl(或任何你想要调用它): var validationMessageTmpl = kendo.template($("#message").html());
<script type="text/kendo-template" id="message">
<div class="k-widget k-tooltip k-tooltip-validation k-invalid-msg field-validation-error" style="margin: 0.5em; display: block; " data-for="#=field#" data-valmsg-for="#=field#" id="#=field#_validationMessage">
<span class="k-icon k-warning">
</span>
#=message#
<div class="k-callout k-callout-n">
</div>
</div>
</script>
至于为什么用户输入正在消失,我认为: this.cancelChanges(); 可能与它有关系.我相信这只是它所说的,取消所有的变化.这将重置您的网格并删除所有用户输入. 有一件事要注意:ModelState中的代码(也就是$.each中的键)必须与要显示错误的列一起使用的视图模型属性的名称相同. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET / VB中的jsFiddle是否相当?
- asp.net-mvc – 流畅的验证自定义验证规则
- asp.net-mvc – @ Html.DisplayNameFor的详细信息模型
- asp.net-mvc – ControllerActionInvoker
- asp.net – ConfigurationManager.AppSettings缓存
- asp.net-mvc-3 – ASP.NET MVC 3和App_Code文件夹
- asp.net-mvc – 如何在Visual Studio 2015中快速解析命名空
- asp.net-mvc-4 – 使用活动目录角色提供者MVC4进行授权
- asp.net-mvc – 在MVC2中使用区域
- asp.net-mvc – 获取在Identity 2中具有指定角色的用户列表
