我正在开发一个由多个页面组成的WebForms应用程序,每个页面都包含一个用户填写的表单。每个表单对应于实体的一部分,这意味着来自一个页面/表单的数据填充实体字段或其子实体字段的一部分。
举个例子:第一页填写了人名和出生数据,第二页填写了健康状况,第三页填写了家庭信息等。 在继续下一页之前,数据当然应该是有效的。我的客户不想处理jQuery或Javascript,因此排除了这一点。在这种情况下实施验证的“最佳实践”是什么?
正在使用实体框架4,大多数GUI控件都是用HTML实现的,而不是用WebForms控件实现的。
答案 0 :(得分:2)
如果您使用自定义HTML作为输入,那么您可能不得不使用一些自定义代码进行验证。在服务器端表单处理程序中,您可以验证输入并在页面无效时将页面呈现给用户。输入检查可以简单如下:
if (string.IsNullOrWhiteSpace(FormCollection["someRequiredInput"])
您可以遍历所有输入,根据业务逻辑检查它们,并可能构建错误列表。然后在输入检查之后,如果错误列表不为空,则将页面呈现给用户,并将错误添加到某种占位符。如果列表为空,请继续处理表单帖子。
即使不排除JavaScript,您仍然希望执行服务器端验证。 从不假设客户端代码按预期工作或甚至执行。客户端验证不是一种安全措施,它只是一种更好的用户体验。服务器端验证是唯一真正的验证。
(所以你仍然可以为增加的UX触摸添加客户端验证,如果客户端确实不允许JavaScript,那么他们就不会看到它,而只会使用服务器端验证。这是有时被称为“优雅降级”,当用户禁用客户端技术时,您可以将Web应用程序设计为仍然完全正常运行,虽然用户体验的优点略低。)
答案 1 :(得分:2)
我的客户不想处理jQuery och [原文如此] Javascript,所以这是排除在外的。
好。 Javascript是强制执行验证的错误位置。使用javascript进行的任何验证仅仅是性能优化。 唯一可接受的真正验证数据的地方在服务器上。
除此之外,.Net包含一些可以使用的方便的验证控件。其中一个控件是CustomValidator,它非常容易覆盖并提供您自己的服务器端代码来强制执行您想要的任何规则。如果您使用的是webforms,这些控件显然是一种选择。
由于您有多页面方法,您可能还需要查看向导控件。