使用.net MVC,我在处理表单帖子的Action中进行了一些服务器端验证。
将错误传递回视图的好方法是什么?
我正在考虑创建一个错误集合,然后将该集合添加到我的ViewData中,然后以某种方式编织一些javascript(使用jQuery)来显示错误。
jQuery有一种自动显示错误的方式会很好,因为这是一种常见的模式。
你做什么?
答案 0 :(得分:9)
您希望将错误添加到ModelState,如@Mehrdad所示。
...
catch (ArgumentOutOfRangeException e)
{
ModelState.AddModelError( e.ParamName, e.Message );
result = View( "New" );
}
并在您的视图中包含ValidationSummary
<%= Html.ValidationSummary() %>
答案 1 :(得分:1)
ViewData.ModelState
旨在将状态信息(错误)从控制器传递到视图。
答案 2 :(得分:0)
不太确定它是否是你想要的,但在http://bassistance.de/jquery-plugins/jquery-plugin-validation/有一个非常容易使用的jquery表单验证插件。它以红色自动显示错误消息。
当然,你仍然需要进行服务器端验证,并传回错误。 tvanfosson向你展示了他的答案。
答案 3 :(得分:0)
我使用内置ModelState
对象来保存我的验证错误。验证通过绑定或手动支持手动添加如下错误:
ModelState.AddModelError("LastName","Last name can't be Doe")
。
为了支持ajax表单post方案,我为ModelStateDictionary GetErrors()
创建了一个扩展方法,它返回一个轻型ModelStateErrorsDTO
对象(适用于json序列化的模型状态验证错误的扁平版本) )。
当表单帖子是ajax请求时,我返回一个json序列化ModelStateErrorsDTO
。
在jquery方面,我编写了一个辅助函数,使用默认的mvc css类将验证错误放在相关的输入字段旁边,即input-validation-error
。
通过这种方式,您可以使用验证消息制作不引人注目的ajaxforms。
希望这有帮助。
答案 4 :(得分:-1)
是的,这是好方法,但无论如何你可以把错误信息放到你自己的ViewData [“key”] =“页面错误... bla ... bla ... bla ...”
<% if (!string.IsNullOrEmpty(ViewData["key"]+"")) { %>
<div>
Yor customized error template
</div
<% } %>