我正在使用 jqgrid并使用内联编辑模式,无法弄清楚如何从服务器端验证规则将错误返回给客户端
在持久化到数据库之前,我在服务器端使用流利的验证进行验证。这很好用,只是我看不到在内联模式下编辑时如何返回错误。如果我不将值保存到数据库中,客户端仍然会显示应该被拒绝的值。
在有人提交内联编辑后返回错误的推荐方法是什么,这样您会在客户端收到一些显示错误的弹出窗口,并且它将保持编辑状态?
注意:下面的这张图片是为了回应奥列格的评论和下面的回答
我正在使用 jqgrid并使用内联编辑模式,无法弄清楚如何从服务器端验证规则将错误返回给客户端
在持久化到数据库之前,我在服务器端使用流利的验证进行验证。这很好用,只是我看不到在内联模式下编辑时如何返回错误。如果我不将值保存到数据库中,客户端仍然会显示应该被拒绝的值。
在有人提交内联编辑后返回错误的推荐方法是什么,这样您会在客户端收到一些显示错误的弹出窗口,并且它将保持编辑状态?
注意:下面的这张图片是为了回应奥列格的评论和下面的回答
推荐的方法是在提交错误数据的响应中使用任何 HTTP 错误代码,并在响应正文中返回错误描述。如果您需要一些更具体的操作,例如显示另一个带有错误信息的对话框,将焦点设置在字段上,用 CSS 类“ui-state-error”标记某些字段或类似的东西,您应该使用errorfunc
回调函数。
如果restoreAfterError
是false
内联编辑将继续。
更新:我在评论中提到服务器应该生成错误消息作为响应。在 ASP.NET MVC 的情况下,默认消息是您作为第一张图片发布的 HTML 文本。如果您使用HandleJsonExceptionAttribute
我在旧答案中描述的错误消息,则错误消息将被序列化为 JSON,但它包含您不需要显示的附加信息(如StackTrace
)。因此,您应该使用editRow或saveRow的errorfunc参数来解码服务器响应。您可以使用已经引用的答案,也可以直接使用该函数:decodeErrorMessage
$.parseJSON
errorfunc: function(rowid, res) {
var errorText = $.parseJSON(res.responseText).Message;
$.jgrid.info_dialog($.jgrid.errors.errcap,
'<div class="ui-state-error">' + errorText + '</div>',
$.jgrid.edit.bClose,
{buttonalign: 'right'});
}