当从客户端向服务器发送信息时,我是在客户端还是在服务器端(或两者)执行规则



我的问题是关于什么是必要的和/或最佳实践。

例如,假设我需要一些来自控制器输入的文本,而该文本不是空白的。

<form action="BaHumBug/Index" method="post" id="xmasTextForm">
    <input name="xmasText" type="text" id="xmasTextInput" />
</form>

我是否强制执行客户端上没有空文本的规则

$('#xmasTextForm').submit(function(ev) {
{
    if ($('#xmasTextForm').val().isWhiteSpace())
    {
        alert("Fill the input with something, dude!");
        return false;
     }
}

或服务器端

[HttpPost]
    public ActionResult Index (string xmasText)
    {
        if (xmasText.IsWhiteSpace())
        {
             // ....
    }

还是为了两层保护我同时做这两件事?还是选择取决于其他因素?

至少在控制器上进行验证总是一种很好的做法,这样可以确保您的应用程序没有接收到无效数据。

客户端的验证也很重要,因为当客户以错误的方式填写表单时,你可以为客户提供良好的反馈。

对代码和控制器的良好设计有很大帮助的一件事是应用TDD(测试驱动的开发方法论(,如果你熟悉,你可以访问此链接以获得更多信息。

通过测试,您可以通过理解和考虑可能的输入案例来设计应用程序。

如前所述-请参阅JavaScript:客户端与服务器端验证-两者都有好处。但我想说,它在服务器上是必不可少的。

Its always good to have validations at client side as well as server side.

原因是如果有人从互联网选项中禁用javascript会怎样。在这种情况下,如果服务器端没有验证,那么您的用例就会失败。

You can use annotations [Required] attribute to make it mandatory field.
If JavaScript is enabled,and there is no user input in mandatory field,you will see control will not pass to controller action.
In Case JavaScript is disabled,control will pass to controller action with **ModelState.IsValid** value will be false.
Server side code should be like this:
[HttpPost]
    public ActionResult Index (string xmasText)
    {
       if (ModelState.IsValid)//rather than check of whitespace
        {
             // ....
        }
    }

最新更新